C 关于整数升级

C 关于整数升级,c,C,根据C17 6.3.1.1 如果int可以表示原始类型的所有值(受宽度限制,对于位字段),则该值将转换为int;否则,它将转换为无符号整数 “所有值”是指同一范围内的整个标识符吗? 那么,当某些标识符在同一标识符范围内具有不能用int表示的变量(例如long-long-int)时,标识符是否没有任何提升 “所有值”是指同一范围内的整个标识符吗 我不知道为什么您认为范围中的所有标识符都很重要。整数提升适用于单个项,可以是对象(例如变量)或表达式 它的意思是,如果这个项目的每一个可能的值(已经是根据

根据C17 6.3.1.1

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

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

“所有值”是指同一范围内的整个标识符吗

我不知道为什么您认为范围中的所有标识符都很重要。整数提升适用于单个项,可以是对象(例如变量)或表达式

它的意思是,如果这个项目的每一个可能的值(已经是根据您的报价(a)之前的段落保证适合
int
无符号int
的类型之一)都可以用
int
类型表示,它将被提升为
int
。否则它将升级为
无符号int


(a) 案文全文指出:

在表达式中使用
int
无符号int
时,可以使用以下内容:

  • 整数类型的对象或表达式(不包括
    int
    无符号int
    ),其整数转换秩小于或等于
    int
    的秩,以及
    无符号整数

  • 类型为
    \u Bool
    int
    有符号int
    无符号int
    的位字段

如果
int
可以表示原始类型的所有值(受宽度限制,对于位字段),则该值将转换为
int
;否则,它将转换为
无符号int
。这些被称为整数促销。所有其他类型均不受整数升迁的影响

“所有值”是指同一范围内的整个标识符吗

我不知道为什么您认为范围中的所有标识符都很重要。整数提升适用于单个项,可以是对象(例如变量)或表达式

它的意思是,如果这个项目的每一个可能的值(已经是根据您的报价(a)之前的段落保证适合
int
无符号int
的类型之一)都可以用
int
类型表示,它将被提升为
int
。否则它将升级为
无符号int


(a) 案文全文指出:

在表达式中使用
int
无符号int
时,可以使用以下内容:

  • 整数类型的对象或表达式(不包括
    int
    无符号int
    ),其整数转换秩小于或等于
    int
    的秩,以及
    无符号整数

  • 类型为
    \u Bool
    int
    有符号int
    无符号int
    的位字段

如果
int
可以表示原始类型的所有值(受宽度限制,对于位字段),则该值将转换为
int
;否则,它将转换为
无符号int
。这些被称为整数促销。所有其他类型均不受整数升迁的影响


它与作用域或其他变量无关,它只是讨论类型的可能值。例如-“unsigned char的所有值”表示集合{0,1,2,…,UCHAR_MAX}它与作用域或其他变量无关,它只是讨论类型的可能值。例如-“unsigned char的所有值”表示集合{0,1,2,…,UCHAR_MAX}@paxdiable,我看到提升的标识符被用作操作数。我认为操作和标识符的作用域有关。C17 6.3.1.1是算术操作数(6.3.1)的子类。@paxdiable我看到提升的标识符被用作操作数。我认为操作和标识符的作用域有关。C17 6.3.1.1是算术操作数(6.3.1)的子类。