C现在是一种相当古老的语言(自20世纪70年代初以来),兼容性始终是一个问题.在那些旧时代,整数的大小可能在不同的架构上有所不同.因此sizeof(int)
仍然是一个实现细节.标准要求:
char
是最小的内存单元,至少有8位 - 所有其他类型的大小都是大小的倍数 char
short
至少有16位int
至少与short
16位一样大并且至少有16位long
至少与int
32位一样大并且具有至少32位long long
至少与long
64位一样大并且至少有64位但是,例如,您无法知道处理32位值的最合适的类型是什么.这就是为什么发明具有精确(或最小)宽度的整数类型的原因.
出于可移植性的原因,C语言对底层机器没有任何假设,这就是为什么具有精确宽度的类型是可选的.话虽如此,它存在于所有常见架构中.
参考:C99的草稿n1256和C11的n1570给出了最小的大小,5.2.4.2.1整数类型的大小可以用更大的值替换实现
下面给出的值应替换为适用于#if预处理指令的常量表达式.此外,除了CHAR_BIT和MB_LEN_MAX之外,以下内容应替换为与根据整数提升转换的对应类型的对象的表达式具有相同类型的表达式.它们的实现定义值的大小(绝对值)应等于或大于显示的值,并带有相同的符号.
- 最小对象的位数不是位字段(字节)
CHAR_BIT 8...
- unsigned short的对象的最大值int
USHRT_MAX 65535 // 2 16 - 1...
- unsigned int类型的对象的最大值
UINT_MAX 65535 // 2 16 - 1...
- unsigned long的对象的最大值int int
ULONG_MAX 4294967295 // 2 32 - 1...
- unsigned long long int类型的对象的最大值
ULLONG_MAX 18446744073709551615 // 2 64 - 1
归档时间: |
|
查看次数: |
199 次 |
最近记录: |