2017-08-20 5 views
-3

はなぜintに先頭の0を追加すると、C++が奇妙に動作するのはなぜですか?

cout << 0110 << endl; 

が72をプリントアウトされましたか?

intに先行する0を追加すると違いはありますが、 '0110'は '110'と同じではないはずですか? 0110octal-literalあること

+5

先頭の0は、8進表記の数値を示します。はい、彼らは面白い骨、最後の世紀プログラミング言語を発明した人たち... – BitTickler

+1

そして、陽気であると思うなら、あなたは '0'だけでなく' 0x 'である。どのような暴動! –

答えて

1

進リテラルは、数字のゼロ(0)は、ゼロ又はそれ以上の8進数(0、1、2、3、4、5、6、7、続いて)

だから、72を印刷するときは、110と同じではありません。

+0

@nilcitこれが原因で問題が発生することはありますか?ソースコード内の数字にのみ影響し、入力には影響しません。 –

+0

私が何かについて考えているのは、ゼロパッド付きintsを使って作業するのがはるかに楽しいということです。 – nilcit

+0

残念なことに、いくつかの人はちょっとあなたに似ていますが、ベース8で数えることは非常に気に入っていました。 :) –

1

コンパイラの権利。先行ゼロものと

8をベースとして、電話番号は、(72)と等しいので0110手段(110)が、扱われます。

08を書き込もうとすると、コンパイラは有効な8進数ではないと不平を言うでしょう。

関連する問題