【发布时间】:2014-10-27 04:44:13
【问题描述】:
在阅读了相当多关于整数提升的问题后,似乎普遍的理解是整数提升或仅适用于小整数类型,例如short int 或char。
但是,我想知道为什么 i 的 unsigned int 变量。 e.值 15 也不应该提升为 int。毕竟,它的转换等级等于 int 和 unsigned int 的等级,正如下面引用中的语句 (1) 所要求的。
由于int 可以毫无问题地表示值15(在我知道的所有平台上),它应该被转换为int。
以下内容可以用在表达式中,只要是 int 或 unsigned 可以使用 int:
具有整数类型的对象或表达式,其整数转换等级小于或等于 int 和 unsigned int 的等级。
_Bool、int、signed int 或 unsigned int 类型的位域。
如果一个 int 可以表示原始类型的所有值(受限制 通过宽度,对于一个位域),该值被转换为一个 int; 否则,它将转换为无符号整数。这些被称为 整数促销。所有其他类型都不变整数 促销活动。
【问题讨论】:
-
加上
unsigned a=1; long long b=2; b = a+b;,a在添加前提升为long long。 -
我不清楚你在问什么,你是在问理由还是在问为什么措辞不允许这样做?
-
也许这会对你有所帮助stackoverflow.com/questions/13600991/…
标签: c promotions