HY!抱歉我的英语不好,无论如何问题是:
我在objective-c中有这段代码:
unsigned int a = 1;
int b = -2
if (b < a);
我希望是真的,而if(b < a)
的结果是假的,为什么?
答案 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)
您无法比较那样的有符号和无符号数字。很可能无符号被提升为有符号值,导致未定义的行为或非常大的数字(取决于负值的存储方式)。