2014-09-23 55 views
0

在以下内容中:
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这是假的是否对结果或每个操作数进行无符号升级?

回答

2

这种表达

2147483647U > -2147483647 - 1 

有两个运营商,其中减去具有比逻辑更高的优先级>。

因此,在第一有计算子表达

-2147483647 - 1 

的两个操作数的类型是int。这是他们的共同类型。所以这两项促销都不会完成。你会得到

-2147483648 

然后表达

2147483647U > -2147483648 

进行评估。

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

在这个表达式中,右操作数的内部表示被解释为unsjgned值。所以如果它大于左操作数,那么结果将等于假。

如果考虑这个例子

7U > -7 -1 

然后-7 - 1将等于-8。 -8内部表示是

1000 

为unsigned int它等于8。因此

7u > 8u 

等于假。

+0

@Cratylus没有铸造。有通常的算术转换,它被应用于表达式的操作数。 – 2014-09-23 18:30:27

相关问题