0

在以下情况下:
2147483647U > -2147483647 - 1由于转换/提升为无符号,它将评估为 false。
我的问题是,它将如何推广?
是先进行减法运算,然后将结果提升为无符号,还是将每个操作数提升为无符号?
有符号的 4 位 [-8,7] 和无符号的 [0,15] 示例:
7U > -7 -1
这会变成 (unsigned)(-7) + (unsigned)(-1) = (9U) + (15U) = 24U
所以我们最终7U > 24U是错误的。
或者我们会有
-7-1 = -8 = 8U
所以7U > 8U这是错误的

4

1 回答 1

2

这个表达

2147483647U > -2147483647 - 1

有两个运算符,其中减号的优先级高于逻辑 >。

所以首先有计算的子表达式

-2147483647 - 1

两个操作数的类型都是 int。这是他们常见的类型。因此,两者都不会进行促销。你会得到

-2147483648

然后表达

2147483647U > -2147483648

被评估。

这里常见的类型是 unsigned int。有符号和无符号整数具有相同的等级,但在这种情况下,常见类型是无符号整数。

在这个表达式中,右操作数的内部表示被简单地解释为 unsjgned 值。因此,如果它大于左操作数,则结果将等于 false。

如果考虑这个例子

7U > -7 -1

那么-7 - 1将等于-8。-8 的内部表示是

1000

作为 unsigned int 它等于 8。因此

7u > 8u

等于假。

于 2014-09-23T18:14:20.907 回答