我是否保证sizeof(type)== sizeof(无符号类型)?

时间:2012-11-01 00:42:08

标签: c++ c sizeof language-lawyer standards-compliance

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

2 个答案:

答案 0 :(得分:42)

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指定)   存储(包括标志信息)并具有相同的对齐要求[...]

答案 1 :(得分:-2)

是的,完全保证 sizeof(签名类型)等于sizeof(无符号类型),因为unsigned只占用带符号类型的负数空间来增加其范围。< / p>