2011-01-13 109 views
4

Hy!對不起,我的英語不好,反正問題是:-2 <1 = false。爲什麼?

我有這樣的代碼在Objective-C:

unsigned int a = 1; 
int b = -2 
if (b < a); 

我期待真實,而不是if(b < a)的結果是假的,爲什麼呢?

+1

unsigned * not unsigend – tekknolagi 2011-01-13 00:34:34

回答

9

Ç自動轉換成-2在比較一個unsigned int。結果是比較實際上是(4294967294 < 1),事實並非如此。

2

刪除「未簽名」。

如果你看看-2二進制表示,然後使用該二進制值作爲一個unsigned int,那麼B> A

希望幫助!

7

您正在比較簽名與未簽名。有符號的值被提升爲無符號的,這會導致很大數目(我認爲是0xFFFFFFFD),這絕對大於1

0

您不能比較這樣的有符號和無符號數。很可能無符號的被提升爲一個有符號值,導致未定義的行爲或一個非常大的數字(取決於負值如何存儲)。

相關問題