Hy!對不起,我的英語不好,反正問題是:-2 <1 = false。爲什麼?
我有這樣的代碼在Objective-C:
unsigned int a = 1;
int b = -2
if (b < a);
我期待真實,而不是if(b < a)
的結果是假的,爲什麼呢?
Hy!對不起,我的英語不好,反正問題是:-2 <1 = false。爲什麼?
我有這樣的代碼在Objective-C:
unsigned int a = 1;
int b = -2
if (b < a);
我期待真實,而不是if(b < a)
的結果是假的,爲什麼呢?
Ç自動轉換成-2在比較一個unsigned int。結果是比較實際上是(4294967294 < 1),事實並非如此。
刪除「未簽名」。
如果你看看-2二進制表示,然後使用該二進制值作爲一個unsigned int,那麼B> A
希望幫助!
您正在比較簽名與未簽名。有符號的值被提升爲無符號的,這會導致很大數目(我認爲是0xFFFFFFFD
),這絕對大於1
您不能比較這樣的有符號和無符號數。很可能無符號的被提升爲一個有符號值,導致未定義的行爲或一個非常大的數字(取決於負值如何存儲)。
爲了進行比較,int b被提升爲一個無符號的臨時變量。這意味着它最終會比a更大。
在這裏看到的規則:http://msdn.microsoft.com/en-us/library/3t4w2bkb(VS.80).aspx
unsigned * not unsigend – tekknolagi 2011-01-13 00:34:34