我不明白为什么会发生这种情况?
int a = 012;
int b = 12;
if (a == b) {
NSLog(@"equal");
}else
NSLog(@"not equal");
为什么打印不相等?
答案 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");
}
输出 不等于。