2014-09-23 47 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

相關問題