为什么11 == 011返回false?

时间:2012-09-23 14:34:45

标签: c++ c boolean

我对我的节目输出感到困惑:

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

输出为"False"

4 个答案:

答案 0 :(得分:26)

在C中,以0开头的数字被视为octal,即基数为8.因此011实际上是9

  

6.4.4.1

     

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

答案 1 :(得分:5)

以下代码

#include <iostream>
using namespace std;

int main()
{
    cout << 11 << endl;
    cout << 011 << endl;
    return 0;
}

产生输出:

11
9

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

所以,

011 (base 8) = 1*8^1 + 1*8^0 = 9 (base 10) 

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

答案 2 :(得分:2)

011被视为octal个号码,而不是decimal011(八进制)到十进制的转换为9。那么11等于9吗?否。

编辑:什么是八进制数?

八进制数字系统,或简称oct,是base-8数字系统,使用数字07。八进制数字可以通过连续分组从二进制数字中产生二进制数字成三个一组(从右边开始)。例如,十进制74的二进制表示形式为1001010,可以将其分组为(00)1 001 010 - 因此八进制表示形式为112

答案 3 :(得分:-1)

这是关于数字基础的。在C ++中,一些数字基数用唯一的前缀表示,以便更舒适地使用(十进制没有),例如,十六进制(16)是0x:0xFACE8D,八进制(8)有0:011

This article可以帮助您更好地理解它。