3

来自C 标准

6.3.1.1

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

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

4

2 回答 2

3

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

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

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

如果一个 int 可以表示原始类型的所有值,则将该值转换为 int;否则,它将转换为无符号整数。这些被称为整数促销。整数提升不会改变所有其他类型。

换句话说,long int不会被提升为intor unsigned int

于 2013-02-21T05:17:22.763 回答
1

我认为“原始类型”是指“[...] 一个整数类型(除了 int 或 unsigned int),其整数转换等级小于或等于 int 和 unsigned int 的等级”,如前面第 6.3 节中定义的那样.1.1.2。但是,不错的尝试:)

于 2013-02-21T05:12:54.550 回答