整型关键字:
int、 short int(short)、long int(long)、long long int(C99后才有)
计算机刚开始发展时,字宽16位,int表示整型就是16位,即2个字节。
发展到后来出现了32位机的时候,int才有32位宽,也就是4个字节。发展到现在64位机,int还是4个字节。
16位及以下操作系统(如8位和16位的CPU)
int用2字节表示,即16位。
long用4字节表示,即32位。
32位操作系统
int用4字节表示,即32位。
long用4字节表示,即32位。
64位操作系统,有两种编译系统:
32位编译系统:
int用4字节表示,即32位。
long用4字节表示,即32位。
64位编译系统:
int用4字节表示,即32位。
long用4字节表示,即64位。
由此可见,int所占字节,由编译器和操作系统决定。比如Keil 编译器和IAR编译器中,int都是16位,但是在VC6.0或delphi中,int就是32位。
下面为一个简单的列述:
short 2个字节
int 2/4个字节(8位和16位系统是2字节,32位系统是4字节,64位系统还是4字节)
long 4/8个字节(除了64位系统是8字节,其他都是4字节)
long long int 8字节 (VC6.0不支持,是在C99中添加的)
还有符号型和无符号型 ,前缀没有带unsigned的都是有符号型。在同一个编译器和系统下,有符号和无符号表示的字节都是相同的。比如16位系统中,int是2个字节,同样的 unsigned int 也是2个字节。无符号型的整型,不能表示负数 比如unsigned int a;a只能是一个正整数和0,不能是负整数。
各类型长度:
①short int(2字节占16位) :-(2^15-1)~(2^15-1),即-32767~32767
unsigned short int(2字节占16位):0~(2^16-1),即0~65535
②int(8/16位系统,2字节占16位):-(2^15-1)~(2^15-1),即-32767~32767
unsigned int(8/16位系统,2字节占16位):0~(2^16-1),即0~65535
③int(32/64位系统,4字节占32位):-(2^31-1)~(2^31-1),即-2147483647 ~2147483647
unsigned int(32/64位系统,4字节占32位):0~(2^32-1),即0 ~ 4294967295
④long int(非64位系统,4字节占32位):-(2^31-1)~(2^31-1),即-2147483647 ~2147483647
unsigned long int(非64位系统,4字节占32位):0~(2^32-1),即0 ~ 4294967295
⑤long int(64位系统,8字节占64位):-(2^63-1)~(2^63-1),即 -9223372036854775807~9223372036854775807
unsigned long int(64位系统,8字节占64位):0~(2^64-1),即 0~18446744073709551615
⑥long long int(8字节占64位):-(2^63-1)~(2^63-1),即 -9223372036854775807~9223372036854775807
unsigned long long int(8字节占64位):0~(2^64-1),即 0~18446744073709551615
无符号类型长度总比有符号类型长度多一位,比如16位int是±2^15-1 ,16位unsigned int却是2^16-1,是因为有符号整型需要一个位去作为符号位,用于表示正负,所以少一位;而无符号整型不需要符号位,所有位全部用于表示整数。
各类型的printf整型输出:
(1)、printf("%d\n",a), 一个有符号整数输出; (涉及%d的都是十进制有符号整数)
(2)、printf("%u\n",a), 一个无符号整数输出; (涉及%u的都是十进制无符号整数)
(3)、printf("%ld\n",a), 输出一个长整型整数输出;
(4)、printf("%4d\n",a), 输出一个4位数整数输出,不够则右对齐,超出则按实际输出;
(5)、printf("%04d\n",a), 输出一个4位数整数输出,不够前面补0,使其补够4位;
(6)、printf("%-4d\n",a), 输出一个4位数整数输出,不够则左对齐,超出则按实际输出;
由图可见,无论什么格式,只要整数超出了位数限制,都会按照实际输出!而%u,只能输出无符号数,如果输出有符号数,会产生错误。