在N3797::3.9.1/2 [basic.fundamental]
部分中有:
有五种标准的有符号整数类型:“
signed char
”,“short
int
“,”int
“,”long int
“和”long long int
“。在此列表中,每种类型 提供至少与列表中前面的存储一样多的存储空间。
标准明确定义char, unsigned char, signed char
的大小为1.并且普通int
的大小取决于INT_MIN
和INT_MAX
,据我所知,并非标准化。那么实现是否可以定义INT_MIN
和INT_MAX
以便sizeof(int) = 1;
?
答案 0 :(得分:6)
是。 signed char
,short
,int
,long
和long long
完全有可能具有相同的64位表示形式,其大小为1
这对标准库的唯一影响是remove some typedefs from stdint.h
- 具体而言,int8_t
,int16_t
,int32_t
,int64_t
,{{1} },uint8_t
,uint16_t
,uint32_t
。请注意,仍会提供uint64_t
和uint8_least_t
等。
编辑:添加@ user657267的链接:1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long),其中还包含特定的位大小要求(但请注意,只有值范围是规范性的)
必须支持以下值范围:
uint8_fast_t
: - (2 7 -1)至2 7 -1 signed char
:0到2 8 -1 unsigned char
: - (2 15 -1)至2 15 -1 signed short
:0到2 16 -1 unsigned short
: - (2 15 -1)至2 15 -1 signed int
:0到2 16 -1 unsigned int
: - (2 31 -1)至2 31 -1 signed long
:0到2 32 -1 unsigned long
: - (2 63 -1)至2 63 -1 signed long long
:0到2 64 -1 编辑:从链接中内联更多信息
答案 1 :(得分:4)
是的,只要一个字节至少有16位,因为它是int
的最小大小。
这在DSP体系结构中很常见,它通常只允许访问例如32位字的内存,而不能访问更小的单元。