C++ 有符号整数类型的大小是否与C/C+中相应的无符号类型的大小不同+;?

C++ 有符号整数类型的大小是否与C/C+中相应的无符号类型的大小不同+;?,c++,c,C++,C,例如,实现能否将sizeof(signed int)定义为两个字节,将sizeof(unsigned int)定义为四个字节?我在C/C++中找不到任何明确禁止这种情况的东西,尽管类型的有符号和无符号版本的最小大小是一致的,而且我看不出它们的大小应该不同的任何逻辑原因 有符号整数类型的大小是否与C/C++中相应的无符号类型的大小不同 否。对于C,int和unsigned具有相同的大小。自信C++继承了相同的规范。 对于每个有符号整数类型,都有一个对应的(但不同的)无符号整数类型(用关键字unsi

例如,实现能否将
sizeof(signed int)
定义为两个字节,将
sizeof(unsigned int)
定义为四个字节?我在C/C++中找不到任何明确禁止这种情况的东西,尽管类型的有符号和无符号版本的最小大小是一致的,而且我看不出它们的大小应该不同的任何逻辑原因

有符号整数类型的大小是否与C/C++中相应的无符号类型的大小不同

否。对于C,
int
unsigned
具有相同的大小。自信C++继承了相同的规范。 对于每个有符号整数类型,都有一个对应的(但不同的)无符号整数类型(用关键字
unsigned
指定),使用相同的存储量(包括符号信息)并具有相同的对齐要求。
C11dr§6.2.5 6


我查过了,这是正确的。当前C++标准使用相同的语句,但是,相应的有符号和无符号整数不需要使用相同的位数来表示值。C 2018 6.2.6.2 2 2允许在有符号整数中填充位,而不是
有符号字符
,因此有符号整数的范围大小可能小于相应无符号整数的范围大小。@dedeecos:不,这不值得一提,因为它不是真的。C标准没有提到BCD,事实上,对于有符号和无符号整数类型,它都需要纯二进制表示。(有些实现可能支持BCD类型作为扩展。)@dedecos:有些CPU确实实现BCD,但C标准不支持它们。但正如我所说的,一些C编译器可能支持它们作为扩展。@dedecos C明确允许3种形式的有符号格式:二的补码、一的补码和有符号的大小。签名BCD不是其中之一,而且显然签名BCD总体上标准化程度很低。