4

重複の可能性:
VC++ で整数を 010 に初期化するのと、10 に初期化するのが異なるのはなぜですか?

これは私を非常に混乱させました。誰かが私の質問に答えてくれることを願っています。このコードが出力「116」を生成するのはなぜですか?

#include <iostream>

int main()
{
    std::cout << 0164 << std::endl;
    return 0;
}

コードは、MSVC++ 2010 および Mac OS X の下で g++ を使用してコンパイルされています。「cout」は「0」を単独で、「164」を単独で出力できますが、数値の最初の桁が「0」になると出力が変わります。

4

2 に答える 2

12

前の 0 により、数値が8 進数として解釈されるためです。

0164 = 
 4 * 1 +
 6 * 8 + 
 1 * 64
 = 116

または、バイナリ経由で:

 0164 =
   0   1   6   4 = 
 000 001 110 100 =
 1110100 = 
 116

同じことが16 進数にも当てはまります。たとえば、0x1FA と書きます。

于 2012-01-28T10:00:38.000 に答える
2

C とその兄弟では0、先頭に がある数値は 10 進数ではなく 8 進数です。

したがって、あなたの数はに等しいです。1 * 82 (1 * 64 = 64) plus 6 * 81 (6 * 8 = 48) plus 4 * 80 (4 * 1 = 4)116

C における 16 進数と 8 進数についての大きな論文については、こちらを参照してください。

于 2012-01-28T10:02:52.817 に答える