【发布时间】: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
我不明白为什么会这样?
int a = 012;
int b = 12;
if (a == b) {
NSLog(@"equal");
}else
NSLog(@"not equal");
为什么打印不相等?
【问题讨论】:
标签: objective-c c int compare
好的。这是因为 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
【讨论】:
前导零表示数字以八进制或以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");
}
输出: 不等于。
【讨论】: