sizeof运算CHAR,INT,长双...可以从一个编译器到另一个。 但我根据C ++ 11或C11标准的任何大小符号和无符号的基本整数类型是一样的有保证吗?
Answer 1:
在C ++ 11标准说,关于整数类型:
(§3.9.1/ 3)对于每一个标准的带符号整数类型,存在一个相应的(但不同)的标准的无符号整数类型:“无符号字符”,“无符号短整型”,“无符号整型”,“unsigned long int类型”和‘无符号长长整型’,其中的每一个占据存储相同量的并具有相同的对准要求(3.11)作为对应的符号整型; 也就是说,每个符号整型具有相同的对象表示为它的相应的无符号整数类型。 同样地,对于每一个扩展符号整数类型的存在具有相同量的存储和对齐要求对应的扩展的无符号整数类型。 [...]
因此,答案是肯定的。
对于C11,这里有一个相应的语句(这是N1570):
(§6.2.5/ 6)对于每个符号整数类型,有一个相应的(但不同)的无符号整数类型(与关键字无符号表示),它使用存储(包括符号信息)相同量的,并且具有相同对齐要求[...]
Answer 2:
是的,有一个完整的保证的sizeof(符号类型)是等于sizeof(无符号型),因为无符号只考虑符号类型的负数,以增加其范围的空间。
文章来源: Do I have the guarantee that sizeof(type) == sizeof(unsigned type)?