关于整数促销

时间:2019-12-25 02:45:38

标签: c

根据C17 6.3.1.1

  

如果int可以表示原始类型的所有值(对于位字段,受宽度限制),则该值将转换为int;否则,它将转换为无符号整数。

“所有值”是否表示同一范围内的整个标识符? 那么,当某些标识符具有在同一标识符范围内不能由int表示的变量(例如long long int)时,标识符没有任何提升吗?

1 个答案:

答案 0 :(得分:2)

  

“所有值”是否表示同一范围内的整个标识符?

我不确定为什么您认为作用域中的所有标识符都很重要。整数促销适用于单个项目,无论是对象(例如变量)还是表达式。

意思是说,如果该项目的每个可能值(已经保证您引用的段落中的段落都适合intunsigned int的类型之一, ))可以由int类型表示,它将提升为int。否则,它将升级为unsigned int


(a)文本完整说明:

  

在可以使用intunsigned int的表达式中可以使用以下内容:

     
      
  • 具有整数类型(intunsigned int除外)的对象或表达式,其整数转换等级小于或等于int的等级,并且   unsigned int

  •   
  • 类型为_Boolintsigned intunsigned int的位字段。

  •   
     

如果int可以表示原始类型的所有值(受位字段的宽度限制),则该值将转换为int;否则,它将转换为unsigned int。这些称为整数促销。整数促销未更改所有其他类型。