32位或64位平台上的sizeof(int)= 1吗?

时间:2014-10-09 04:43:05

标签: c++

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_MININT_MAX,据我所知,并非标准化。那么实现是否可以定义INT_MININT_MAX以便sizeof(int) = 1;

2 个答案:

答案 0 :(得分:6)

是。 signed charshortintlonglong long完全有可能具有相同的64位表示形式,其大小为1

这对标准库的唯一影响是remove some typedefs from stdint.h - 具体而言,int8_tint16_tint32_tint64_t,{{1} },uint8_tuint16_tuint32_t。请注意,仍会提供uint64_tuint8_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位字的内存,而不能访问更小的单元。