首页 > 解决方案 > 关于整数提升

问题描述

根据 C17 6.3.1.1

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

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

标签: c

解决方案


“所有值”是否意味着同一范围内的整个标识符?

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

它的意思是,如果该项目的每个可能值(已经保证适合您的报价(a)int之前的段落或段落的类型之一)可以由类型表示,则它被提升为. 否则它将被提升为.unsigned intintintunsigned int


(a)案文全文指出:

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

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

  • _Bool, int,signed int或类型的位域unsigned int

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


推荐阅读