私のプログラムが出力するものに戸惑っています:
#include<stdio.h>
int main()
{
if(11==011)
printf("True");
else
printf("False");
}
出力は"False"
です。
Cでは、で始まる数は8進数、つまり基数80
と見なされます。実際には。011
9
6.4.4.1
10進定数は、ゼロ以外の数字で始まり、一連の10進数字で構成されます。 8進定数は、接頭辞0 と、それに続く0から7までの数字のシーケンスのみで構成されます。
次のコード
#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
。
それは数値ベースについてです。C ++では、より快適に使用できるように、一部の基数は一意の接頭辞で示されます(10進数には何もありません)。たとえば、16進数(16)は0x:0xFACE8D、8進数(8)は0:011です。
この記事は、それをよりよく理解するのに役立ちます。