为什么两个整数都不相等?

时间:2016-05-31 11:09:58

标签: objective-c c int compare

我不明白为什么会发生这种情况?

int a = 012;        
int b = 12;

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

为什么打印不相等?

2 个答案:

答案 0 :(得分:4)

好。这是因为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

答案 1 :(得分:1)

前导零表示该数字以八进制或基数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");
}

输出 不等于