在以下方面:
2147483647U > -2147483647 - 1由于将转换/升级为未签名,所以它将计算为false。
我的问题是如何推广?
减法操作是先进行,结果将提升为无符号,还是每个操作数将被提升为无符号操作?
示例具有4个位-8,7用于签名,0,15用于无符号:
7U > -7 -1
这是否变成(无符号)(-7)+(无符号)(-1)= (9U) + (15U) = 24U
所以我们最终得到的是7U > 24U,这是假的。
或者我们会有
-7-1 = -8 = 8U
所以7U > 8U是假的
发布于 2014-09-23 18:14:20
这句话
2147483647U > -2147483647 - 1有两个运算符,其中减号的优先级高于逻辑>。
因此,首先有计算的子表达式。
-2147483647 - 1这两个操作数都有int类型。这是他们共同的类型。因此,这两项推广都不会完成。你会得到
-2147483648然后表达
2147483647U > -2147483648会被评估。
这里常见的类型是无符号int。有符号的int和无符号的int具有相同的秩,但是在这种情况下,常见的类型是无符号int。
在这个表达式中,右操作数的内部表示法被解释为无符号值。因此,如果它大于左操作数,则结果将等于false。
如果考虑这个例子
7U > -7 -1那么-7 - 1将等于-8.-8的内部表示形式是
1000作为无符号int,它等于8。
7u > 8u等于虚假。
https://stackoverflow.com/questions/26001824
复制相似问题