来自C 标准
6.3.1.1
如果 int 可以表示原始类型的所有值(受宽度限制,对于位域),则该值将转换为 int;否则,它将转换为无符号整数。这些被称为整数促销。
所以这意味着如果我long int
在表达式中使用 a ,它将被降级为unsigned int
?
您引用的位受其上方文本的限制:
可以在可以使用 int 或 unsigned int 的表达式中使用以下内容:
- 整数类型的对象或表达式,其整数转换等级小于 int 和 unsigned int 的等级。
- _Bool、int、signed int 或 unsigned int 类型的位域。
如果一个 int 可以表示原始类型的所有值,则将该值转换为 int;否则,它将转换为无符号整数。这些被称为整数促销。整数提升不会改变所有其他类型。
换句话说,long int
不会被提升为int
or unsigned int
。
我认为“原始类型”是指“[...] 一个整数类型(除了 int 或 unsigned int),其整数转换等级小于或等于 int 和 unsigned int 的等级”,如前面第 6.3 节中定义的那样.1.1.2。但是,不错的尝试:)