C语言数据类型—整型的几种类别及其使用

时间:2021-09-30 15:50:58

整型关键字:

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

int2字节表示,即16位。

long4字节表示,即32位。


32位操作系统

int4字节表示,即32位。

long4字节表示,即32位。


64位操作系统,有两种编译系统: 

32位编译系统
int4字节表示,即32位。
long4字节表示,即32位。

 

64位编译系统
int4字节表示,即32位。

long4字节表示,即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位数整数输出,不够则左对齐,超出则按实际输出;
C语言数据类型—整型的几种类别及其使用
由图可见,无论什么格式,只要整数超出了位数限制,都会按照实际输出!而%u,只能输出无符号数,如果输出有符号数,会产生错误。