上次我们说到,计算机内部都是用 0 1 以二进制计数的方式存储数据的。事实上,C 语言定义了一些不同的数据类型,比如 char,short int,long int,float,double 等。既然都是用 0 1 记录的数据,那为何还要分数据类型呢?
为何 C 语言要定义不同的数据类型
首先需要明白的是,char,short int,long int,float,double 数据类型占的字节数是不同的,也就是说计算机用于存放这些不同的数据类型,所用的空间是不一样的。
char 类型一般只占一个字节,short 通常占两个字节,其他类型有时候常常因计算机的架构不同,占用空间会有所差异。
我们知道,C语言是一门极其重视效率的语言,优秀的C程序员应该使用更少的资源,以更好的效率去完成工作。举一个例子,假设编程时需要一个变量,这个变量表示一个范围从 0 到 100 变化的整数。当然,这时使用任意一种整型类型(char,short int,long int等)都可以。但是,最好的办法是使用 char 类型,因为无符号的 char 类型能够表示从 0 到 255 的整数,这足够了。使用其他整型,虽然也能完成工作,但是却浪费了一部分空间。
可能你说,我的计算机存储空间大得很,不需要在意这一点点空间。但是,如果一整个大型项目如果都不注重这些,浪费的空间就值得注意了。此外,数据类型不同,计算机使用的效率也不同。对于C语言来说,同样是一句语句,计算机可能要分很多句来解释它。
还记得在《》一节中,C语言语句和机器指令的对应关系吗?
说了这么多空的,我们来看一个实例,下面这个程序首先定义了一个 char 变量,一个 double 变量,然后分别对这两个变量赋值。顺便把各种数据类型占用空间大小打印出来了。
#include <stdio.h>
int main()
{
char ic;
double dd;
ic = 1;
dd = 1.1;
printf("%ld, %ld, %ld, %ld, %ld\n",
sizeof(char), sizeof(short int),
sizeof(long int), sizeof(float),sizeof(double));
return 0;
}
编译执行,输出 “1,2,8,4,8”,不同的机器可能有所差异,但这不是重点,弄清楚不同的数据类型占用的空间不同就可以了。我们更关心的是,计算机使用不同的数据类型,会有效率上的差异?答案是肯定的,现在一起来看看这个程序,计算机是如何解释运行的。
看到没,对于 double 型的数据赋值,计算机需要三条指令才可以完成,而对于char类型数据的赋值,计算机只需要一条指令就能够完成,效率是前者的 3 倍。
所以,使用C语言编程,是极其灵活的,也是极其重视细节的。能够用两分力完成的工作,绝对不要用三分力。优秀的C程序员编写的代码执行效率,常常比不优秀的C程序员编写的代码高得多。