2011-01-13 113 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

您不能比较这样的有符号和无符号数。很可能无符号的被提升为一个有符号值,导致未定义的行为或一个非常大的数字(取决于负值如何存储)。

相关问题