我是否有保证sizeof(type) == sizeof(unsigned type)?

26

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


我希望如此,除非有某种类型的不等式是有意义的,如果是这样的话,我很乐意听取意见。 - chris
2
顺便提一下,char 的大小始终为 1。char 的大小可能很不寻常,如 16 位,但是 sizeof char 仍然是 1,而 sizeof 32 位类型的大小将为 2。 - Tor Klingberg
2个回答

44
C++11标准关于整型的规定如下: 对于每个标准的带符号整型类型,都有一个相应的(但不同的)标准无符号整型类型:“unsigned char”、“unsigned short int”、“unsigned int”、“unsigned long int”和“unsigned long long int”,它们占用与相应的带符号整型类型相同的存储空间并具有相同的对齐要求(3.11);也就是说,每个带符号整型类型具有与其相应的无符号整型类型相同的对象表示。同样,对于每个扩展的带符号整型类型,都存在一个相应的扩展的无符号整型类型,其存储空间和对齐要求相同。
因此,答案是肯定的。
对于C11,在这里有相应的声明(来源于N1570):
对于所有带符号整型类型,都有一个相应的(但不同的)无符号整型类型(使用关键字unsigned指定),它使用相同的存储空间(包括符号信息)并具有相同的对齐要求[...]

-2

是的,有一个完整的保证,即signed类型的sizeof等于unsigned类型的sizeof,因为unsigned只占用signed类型的负数空间以增加其范围。


2
标准中没有规定 UINT_MAX > INT_MAX;补码机器可能会使它们相等。 - supercat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接