26

sizeof char, int, long double... 可能因编译器而异。但是我是否根据 C++11 或 C11 标准保证任何有符号和无符号基本整数类型的大小是相同的?

4

2 回答 2

43

C++11 标准对整数类型进行了说明:

(第 3.9.1/3 节)对于每个标准有符号整数类型,都存在相应的(但不同的)标准无符号整数类型:“unsigned char”、“unsigned short int”、“unsigned int”、“unsigned long int ”和“unsigned long long int”,每个都占用相同的存储量,并且与对应的有符号整数类型具有相同的对齐要求(3.11);也就是说,每个有符号整数类型都具有与其对应的无符号整数类型相同的对象表示。同样,对于每个扩展的有符号整数类型,都存在一个对应的扩展无符号整数类型,具有相同的存储量和对齐要求。[...]

所以答案是肯定的。

对于C11,这里有对应的说法(这个来自N1570):

(§6.2.5/6)对于每个有符号整数类型,都有一个对应的(但不同的)无符号整数类型(用关键字 unsigned 指定),它使用相同的存储量(包括符号信息)并具有相同的对齐要求 [...]

于 2012-11-01T00:45:01.977 回答
-2

是的,可以完全保证sizeof(signed type) 等于 sizeof(unsigned type)因为 unsigned 只占用有符号类型的负数空间来增加其范围。

于 2017-08-14T18:34:02.423 回答