在以下情况下:
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
这是错误的
问问题
48 次
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 回答