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