2

たとえば、C ++ではsetprecision(12)を記述すると、12は10を底としますが、setprecision(012)のように記述すると、8進数になります。なぜですか。

4

3 に答える 3

12

先行ゼロ(先行0x以外)の定数は常に8進数であるため、次のようになります。

8進整数リテラル(基数8)は、数字0で始まり、8進数のシーケンスで構成されます。

C ++ドラフト標準(n1905)§2.13.1

setprecisionとはまったく関係ありません。

于 2010-04-29T20:56:09.150 に答える
5

それがCでの動作方法だったからです。Cが設計されたとき、8進数が頻繁に使用されていたので、それらに表記を付けました。現在、それが役立つことはめったになく、ほとんどの場合混乱を招きます。

于 2010-04-29T20:57:07.290 に答える
3

C ++では、整数リテラルが0数字で始まる場合(および0その後に)がないx場合、後続の数字は8進数として扱われます。

于 2010-04-29T20:56:31.903 に答える