【问题标题】:Why both Integer is not equal? [duplicate]为什么两个整数不相等? [复制]
【发布时间】:2016-09-29 08:53:21
【问题描述】:

我不明白为什么会这样?

int a = 012;        
int b = 12;

if (a == b) {
    NSLog(@"equal");
}else
    NSLog(@"not equal");

为什么打印不相等?

【问题讨论】:

    标签: objective-c c int compare


    【解决方案1】:

    好的。这是因为 C int 类型将带有前导零的文字解释为八进制。

    为了证明这一点,请将您的示例修改为以下内容:

    int a = 012;
    int b = 12;
    if (a == b) {
        NSLog(@"%d does equal %d", a, b);
    } else {
        NSLog(@"%d does NOT equal %d", a, b);
    }
    

    输出:

    10 does NOT equal 12
    

    那是因为八进制 (1 * 8 = 8) + 2 = 10

    更多信息请见: https://en.wikipedia.org/wiki/Integer_literal#Affixes

    【讨论】:

      【解决方案2】:

      前导零表示数字以八进制或以8为基数表示;因此,012 被转换为八进制为(1*8)+2 = 10. 由于这个原因,if statement 返回false

      int a = 012;
      int b = 12;
      
      NSLog(@"%d", a);
      NSLog(@"%d", b);
      
      if (a == b) {
          NSLog(@"equal");
      }else {
          NSLog(@"not equal");
      }
      

      输出: 不等于

      【讨论】:

        猜你喜欢
        • 2021-12-11
        • 1970-01-01
        • 2020-12-17
        • 2020-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多