什么时候类型被提升为unsigned int?

时间:2015-01-27 18:51:15

标签: c++ c types casting integer-promotion

article说:

  

如果原始类型的所有值都可以表示为int,则   small类型的值转换为int;否则就是   转换为unsigned int

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

3 个答案:

答案 0 :(得分:2)

short不能超过int,但在某些平台上,它的大小可能相同。 intlong也是如此。这意味着,如果"较小"一个是未签名的,"更大"一定也必须。

答案 1 :(得分:2)

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

  

boolchar16_tchar32_twchar_t整数转换以外的整数类型的prvalue   如果int可以代表所有int,则排名(4.13)小于int的排名可以转换为unsigned int类型的公开值   源类型的值;否则,源prvalue可以转换为unsigned short类型的prvalue。

有些平台,例如intunsigned short都是16位长。尽管如此,根据定义,int 排名低于int,并且需要进行整体推广。在这种情况下,unsigned short无法代表unsigned int类型的所有值,因此促销是int

编辑:C99有类似的措辞:

  

以下内容可用于unsigned intint的任何地方   使用:

     
      
  • 具有整数转换级别较小的整数类型的对象或表达式   大于或等于unsigned int_Bool的等级。
  •   
  • 类型为intsigned intunsigned intint的位字段。
  •   
     

如果int可以表示原始类型的所有值,则该值将转换为unsigned int;   否则,它将转换为{{1}}。这些被称为整数   促销活动。 48)所有其他类型的整数促销都没有改变。

答案 2 :(得分:0)

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