C中的整数促销会降级`long int`?

时间:2013-02-21 04:47:27

标签: c

来自C standard

6.3.1.1

  

如果int可以表示原始类型的所有值(限制为   通过宽度,对于一个位域,该值被转换为int;   否则,它将转换为unsigned int。这些被称为   整数促销。

这意味着,如果我在表达式中使用long int,它将降级为unsigned int

2 个答案:

答案 0 :(得分:3)

您引用的位受上面文本的限制:

  

无论是int还是unsigned,都可以在表达式中使用以下内容   可以使用int:

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

如果int可以表示原始类型的所有值,则值为   转换为int;否则,它将转换为unsigned int。   这些被称为整数促销。所有其他类型都保持不变   通过整数促销。

换句话说,long int未升级为intunsigned int

答案 1 :(得分:1)

我认为“原始类型”是指“[...]整数类型(除了int或unsigned int之外) 其整数转换等级小于或等于int和的等级 unsigned int“,如前面第6.3.1.1.2节中所定义。但是,很好的尝试:)