其他整数类型
修饰基本整数类型
- short
- long
- unsigned
- short int 或者 short 占用存储空间可能比 int 类型少
- long int 或者 long 占用存储空间比 int 多
- long long int 或 long long (C99标准加入) 占用的存储空间可能比 long 多。至少占用 64 位。
- unsigned int 或 unsigned 只用于非负数的场合。例如 16位 unsigned int 允许取值范围是 0~65535 ,而不是 -32768~32767 。
使用多种整数类型的原因
- C语言规定了 short 占用的存储空间不能多于 int
- long 占用的存储空间不能少于 int
这样的规定是为了适应不同的机器。例如:早期电脑中 int 和 short
类型都占 16 位,long 类型占 32,后来系统都是用 16位存储 short 类型。32位存储 int 类型和 long 类型。现在,计算机普遍为 64 位处理器,为了存储 64 位的整数,才引入了 long long 整型
现在个人计算机最常见的设置是:
- long long 占 64 位
- long 占 32位
- short 占 16位
int 占 16位或者 32位(依计算机的自然字长而定)
原则上,这 4 种类型代表 4 种不同的大小,但是实际使用中,有些类型之间通常有重叠
对于 16 位机,short 和 int 的最小取值范围是 [-32767,32767]
对于 32 位机, long 的最小取值范围 [-2147483647,2147483647]
unsigned int 和 unsigned short 最小取值范围是[0,65535]
unsigned long 最小取值范围 [0,4294967295]
对于 64位 long long 类型比较大,就不说了
long 常量和 long long 常量
当整型存储的数值很大,编译器会一次尝试使用:
- unsigned int
- long
- unsigned long
- long long
- unsigned long long
如果要把一个较小的常量当做 long 类型。在值得末尾加上l或L
整数溢出
如果整数超出类型的取值范围会怎么样?
|
|
打印 short、long、long long和 unsigned
- 打印 unsigned 类型的值,使用 %u 转换说明
- 打印 long 类型的值,使用 %ld 转换说明
- 打印 short 类型的值,%hd 表示以十进制显示 short 类型的整数
- 对于 long long 类型,%lld 和%llu 分别表示有符号和无符号类型
具体代码:
|
|
在使用 printf() 函数时,切记检查每一个待打印都有对应的转换说明,还要检查转换说明的类型是否与待打印值得类型相匹配