2-3-1 整数
有时可在整数前面加上一些限定字,例如short、long、unsigned和signed。所以事实上整数的数据形态有9种,如下所示。
整数相关概念表
注1 8位(bit)称为一字节(byte),早期C语言的整数长度是2字节,也可称16位。早期16位的计算机,是用16位长度当作整数,32位计算机则是用32位长度当作整数,至于64位计算机是用32位或64位当作整数长度,依实际操作而定。
注2 笔者目前的计算机在Dev C++或是Visual C++环境,整数(int)长度是4字节,也可称32位。同时笔者计算机在Dev C++或是Visual C++环境,长整数(long)长度也是32位,但是短整数则仍是2字节,也就是16位。
声明整数需使用int关键词,其语法如下:
int 整数变量;
也可以用整数相关概念表中的其他关键词,声明其他整数类型。此外,还可以在声明整数时设定整数变量的初值。
实例:声明整数变量i的初值是1。
int i = 1;
在上述整数声明中,如果加上“unsigned”,代表此整数一定是正整数,若以“short int”及“unsigned short int”声明,则内存内容与实际数值关系如下所示。
值得注意的是,短整数short声明,由于所占内存空间是16位,因此,其最大值是32767。如果指令如下:
int i = 32767; i = i + 1;
经上述指令后,i并不是32768,而是-32768,通常又称此种情况为溢位(overflow)。程序设计时为了避免这种情形发生,一定要小心地选择整数长度。
另外,一般整数由于所占内存空间是32位,因此,其最大值是2147483647。假设指令如下:
int i = 2147483647; i = i + 1;
经上述指令后,i并不是2147483648,而是-2147483648,发生溢位。不过目前在编译程序的主流中,对于整数int声明一般皆是给予32位的空间。
为了避免搞混,也可以直接使用short(短整数)与long(长整数)声明,如下:
short int i; long int j;
或是省略int,用下列方式声明:
short I; long j;
上述将i声明为短整数,所占空间是16位,j则声明为长整数,所占空间是32位。
程序实例ch2_1.c:用程序真正了解短整数溢位的概念。
上述程序完全验证了前面短整数的概念,原i1是32767,常理推知,若将i值加1,i位应变成32768,但由程序可知i值变成-32768,这就是溢位。
注1 以上程序第11行的printf( )是输出函数,“%d”是整数输出的格式字符串,相当于控制i1变量使用整数格式输出,第3章会做更完整的说明。
注2 变量声明后,如果未设定变量值,此变量内容不一定是0,而是原先在内存的残值,所以使用前要特别留意。
程序实例ch2_1_1.c:认识内存的残值,这个程序声明了3个整数变量,没有设定变量内容,输出时i2结果是1,这个1就是内存残值。
因为是内存的残值,每台计算机使用状况不同,读者可能会获得不一样的结果。
程序实例ch2_2.c:用程序真正了解整数及长整数溢位的概念。
上述程序完全验证了前面整数及长整数的概念,原i1是2147483647,常理推知,若将i值加1,i位应变成2147483648,但由程序可知i值变成-2147483648,这就是溢位。