-2< 1 =假。为什么?

时间:2011-01-13 00:33:33

标签: objective-c if-statement unsigned

HY!抱歉我的英语不好,无论如何问题是:

我在objective-c中有这段代码:

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

我希望是真的,而if(b < a)的结果是假的,为什么?

5 个答案:

答案 0 :(得分:9)

C在比较中自动将-2转换为unsigned int。结果是比较实际上是(4294967294 <1),而不是。

答案 1 :(得分:7)

您正在将签名与未签名进行比较。签名值被提升为无符号,这导致大量(我认为0xFFFFFFFD),这肯定大于1

答案 2 :(得分:3)

将int b提升为无符号临时变量以进行比较。这意味着它最终大于a。

请参阅此处了解规则:http://msdn.microsoft.com/en-us/library/3t4w2bkb(VS.80).aspx

答案 3 :(得分:2)

删除“未签名”。

如果查看-2的二进制表示,然后将该二进制值用作unsigned int,则b&gt; a

希望有所帮助!

答案 4 :(得分:0)

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