整数类型概述
整数是以二进制的方式存储的.
8 种整数类型:
-
[signed] short [int] : 占用的存储空间可能比 int 少.
-
[signed] int : 如果占 16 位则取值范围为 [-32768, 32767], 规定取值范围最小为 [-32768,
32767]. -
[signed] long [int] : 占用的存储空间可能比 int 多.
-
[signed] long long [int] : C99标准加入, 占用的存储空间可能比 long 多, 至少占 64 位, 因为 long long 类型就是为了支持 64 位机器才引入的.
-
unsigned short [int]
-
unsigned [int] : 如果占 16 位则取值范围为 [0, 65535].
-
unsigned long [int]
-
unsigned long long [int] : C99标准加入.
C 语言只规定了 short 占用的存储空间不能多于 int, long 占用的存储空间不能少于 int.
一般而言, 存储一个 int 类型要占用一个机器字长. ISO C 规定, int 类型的取值范围最小为 [-32768, 32767] (即 int 占 16 位时的取值范围).
不同整数类型所占用的内存空间大小以及各个类型表示的数值范围不同.
一般而言, 系统用一个特殊位的值表示有符号整数的正负号.
整型常量一般都默认为 int 类型 (只要该常量在 int 类型的取值范围内). 可以用整型常量后缀修改这一默认的数据类型.
一般, 十进制的整型常量按照自身数值的大小, 被认为的类型依次为: int, long, unsigned long, long long, unsigned long long.
整型常量一般都默认为十进制. 可以用前缀修改默认的进制. 0x 或 0X 表示是十六进制整数. 0 前缀表示八进制整数.
使用不同的进制数是为了方便, 不会影响数被储存的方式.
一般, 八和十六进制的整型常量按照自身数值的大小, 被认为的类型依次为: int, unsigned int, long, unsigned long, long long, unsigned long long.
long 类型的后缀: 对于十进制, 八进制和十六进制的整数而言, 如果需要将一个较小的整数视为 long 类型, 可以加后缀 l 或者 L. 在 int 占 16 位, long 占 32 位的系统中, 会将 7, 07 和 0X7 均作为 16 位存储, 将 7L, 07L 和 0X7L 均作为 32 位存储.
unsigned long 类型的后缀: UL
long long 类型的后缀: ll 或 LL.
unsigned long long 类型的后缀: ull 或 ULL.
溢出
溢出行为是未定义的, C 标准并未规定溢出规则.
常见的情况是从起始位置重新开始, 比如取值范围为 [-32768, 32767] 时, 32767+1 = -32768, 32768-1 = 32767.