为什么11 == 011返回false?

2 c c++ boolean

我很困惑我的程序输出:

#include<stdio.h>
int main()
{
    if(11==011)
        printf("True");
    else
        printf("False");
}
Run Code Online (Sandbox Code Playgroud)

输出是"False".

cni*_*tar 26

在C中,以数字开头的数字0被认为是八进制,即基数8. 011实际上是9.

6.4.4.1

十进制常量以非零数字开头,由一系列十进制数字组成. 八进制常量由pre fi x 0组成, 可选地后跟一个数字0到7的序列.


mjg*_*py3 5

以下代码

#include <iostream>
using namespace std;

int main()
{
    cout << 11 << endl;
    cout << 011 << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

产生输出:

11
9
Run Code Online (Sandbox Code Playgroud)

这是因为在数字前面添加0会产生八进制数.

所以,

011 (base 8) = 1*8^1 + 1*8^0 = 9 (base 10) 
Run Code Online (Sandbox Code Playgroud)

这可以解释为什么条件评估为false.