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

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

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指定),它使用相同的存储量(包括符号信息)并具有相同的对准要求[…]

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