2

我对我的程序输出的内容感到困惑:

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

输出是"False"

4

4 回答 4

26

在 C 中,以 8 开头的数字0被认为是八进制,即以 8011为底。实际上也是如此9

6.4.4.1

十进制常量以非零数字开头,由一系列十进制数字组成。 八进制常数由前缀 0 组成, 可选地后跟数字 0 到 7 的序列。

于 2012-09-23T14:35:40.620 回答
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.

于 2012-09-23T14:38:12.210 回答
2

011被视为一个octal数字,而不是decimal. 011(八进制)到十进制的转换是9。所以11等于9? 不。

编辑:什么是八进制数?

八进制数字系统,或简称oct,是base-8数字系统,使用数字0来表示。八进制7数字可以通过将连续的二进制数字分成三个一组(从右开始)由二进制数字组成。例如,十进制的二进制表示741001010,它可以分组为(00)1 001 010- 所以八进制表示是112

于 2012-09-23T14:40:13.713 回答
-1

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

这篇文章可以帮助你更好地理解它。

于 2012-09-23T14:37:20.657 回答