2

私のプログラムが出力するものに戸惑っています:

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

出力は"False"です。

4

4 に答える 4

26

Cでは、で始まる数は8進数、つまり基数80と見なされます。実際には。0119

6.4.4.1

10進定数は、ゼロ以外の数字で始まり、一連の10進数字で構成されます。 8進定数は、接頭辞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を付けると、8進数が生成されるためです。

それで、

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

これは、条件がとして評価される理由を説明しますfalse

于 2012-09-23T14:38:12.210 に答える
2

011octalではなく、数値として扱われdecimalます。011(8進数)から10進数への変換はです9。だから?11_ 9いいえ。

編集:8進数とは何ですか?

8進数システム、または略してoctは数字システムであり、数字をbase-8使用します。8進数は、連続する2進数を3つのグループ(右から開始)にグループ化することにより、2進数から作成できます。たとえば、10進数の2進数表現は、にグループ化できます–したがって、8進数表現はです。07741001010(00)1 001 010112

于 2012-09-23T14:40:13.713 に答える
-1

それは数値ベースについてです。C ++では、より快適に使用できるように、一部の基数は一意の接頭辞で示されます(10進数には何もありません)。たとえば、16進数(16)は0x:0xFACE8D、8進数(8)は0:011です。

この記事は、それをよりよく理解するのに役立ちます。

于 2012-09-23T14:37:20.657 に答える