【问题标题】:-2 < 1 = false. Why?-2 < 1 = 错误。为什么?
【发布时间】:2011-06-08 05:13:24
【问题描述】:

喂!对不起,我的英语不好,无论如何问题是:

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

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

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

【问题讨论】:

  • objective c 是否将负整数解释为正整数?也许?
  • 类型无符号整数类型不能容纳负数。使用调试器查看 B 中的实际值,你会发现它不是 -2
  • 猜测 -2 被强制转换为无符号并成为一个非常大的数字。
  • 答案已在此链接中stackoverflow.com/questions/2084949/…

标签: objective-c if-statement unsigned


【解决方案1】:

删除“未签名”。

如果您查看 -2 的二进制表示,然后将该二进制值用作无符号整数,则 b>a

希望有帮助!

【讨论】:

    【解决方案2】:

    您正在比较有符号和无符号。有符号的值被提升为无符号的,这导致一个很大的数字(我认为0xFFFFFFFD)肯定大于1

    【讨论】:

      【解决方案3】:

      你不能像这样比较有符号和无符号数字。最有可能将 unsigned 提升为有符号值,从而导致未定义的行为或非常大的数字(取决于负值的存储方式)。

      【讨论】:

        【解决方案4】:

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

        规则见这里:http://msdn.microsoft.com/en-us/library/3t4w2bkb(VS.80).aspx

        【讨论】:

          【解决方案5】:

          C 在比较中自动将 -2 转换为 unsigned int。结果是对比实际是(4294967294

          【讨论】:

            猜你喜欢
            • 2022-01-17
            • 2015-04-07
            • 1970-01-01
            • 2010-10-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-04-12
            相关资源
            最近更新 更多