类型何时提升为无符号 int



这篇文章说:

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

signed/unsigned charsigned/unsigned short的所有值都可以表示为int,那么一个类型什么时候被提升为unsigned int呢?

short不能长于int但在某些平台上,它的大小可能相同。intlong也是如此.这意味着,如果"较小"的没有符号,那么"较大"的也必须是无符号的。

这篇文章使用了草率的术语。源类型不必"小于"int 。以下是C++11标准的内容:

boolchar16_tchar32_twchar_t 以外的整数类型的 prvalue,其整数转换 秩 (4.13) 小于 int int 的秩 如果 int 可以表示所有 源类型的值;否则,可以将源 PRvalue 转换为类型 unsigned int 的 PR值。

例如,有些平台上的unsigned shortint都是16位长。然而,根据定义,unsigned short的等级低于int,需要整体晋升。在这种情况下,int不能表示 unsigned short 类型的所有值,因此提升是 unsigned int

编辑:C99有类似的措辞:

可以在

表达式中使用以下内容,无论intunsigned int 用于:

    整数
  • 类型整数转换排名较低的对象或表达式 大于或等于intunsigned int的等级。
  • 类型 _Boolintsigned intunsigned int 的位域。

如果int可以表示原始类型的所有值,则该值将转换为int ; 否则,它将转换为unsigned int。这些称为整数 促销。48) 所有其他类型均因整数促销而保持不变。

好吧,如果sizeof(char) == sizeof(int),那么无符号char应该被提升为无符号的int

最新更新