2

这篇文章说:

如果原始类型的所有值都可以表示为 int,则将较小类型的值转换为 int;否则,将其转换为无符号整数

signed/unsigned char和的所有值signed/unsigned short都可以表示为int,那么什么时候将类型提升为unsigned int

4

3 回答 3

2

Ashort不能比 an 长,int但在某些平台上它可能是相同的大小。int和也是如此long。这意味着如果“较小”的那个是无符号的,那么“较大的”也必须是无符号的。

于 2015-01-27T18:55:20.483 回答
2

这篇文章使用了草率的术语。源类型不必比int. 以下是 C++11 标准所说的:

如果可以表示源类型的所有值,则可以将除bool, char16_t,之外的整数类型的纯右值char32_t,或者wchar_t其整数转换等级(4.13)小于等级的int纯右值转换为类型的纯右值;否则,源纯右值可以转换为类型的纯右值。intintunsigned int

比如说,有些平台的unsigned short长度int都是 16 位。然而,排名低于定义,unsigned short并受到整体提升。在这种情况下,不能代表 type 的所有值,所以提升是 to 。intintunsigned shortunsigned int

编辑:C99 有类似的措辞:

以下可以用在表达式中,只要可以使用intor unsigned int

  • 具有整数类型的对象或表达式,其整数转换等级小于或等于 和 的int等级unsigned int
  • _Bool, int,signed int或类型的位域unsigned int

如果 anint可以表示原始类型的所有值,则将该值转换为int; 否则,将其转换为unsigned int. 这些被称为整数促销。48) 整数提升不会改变所有其他类型。

于 2015-01-27T18:59:39.807 回答
0

好吧,如果 sizeof(char) == sizeof(int),那么 unsigned char 应该被提升为 unsigned int

于 2015-01-27T18:55:05.413 回答