数値定数と接頭辞ゼロの神秘的な力
C/C で数値定数の接頭辞を次のようにするとどうなるか考えたことはありますか?ゼロ?よく知られた 10 進定数 (例: 123) とは異なり、この一見無害な変更には隠された秘密があるようです。
この奇妙な動作を説明するために、元の質問の例を考えてみましょう: int を値 0123 で初期化する興味深いことに、印刷結果は予想される 123 ではなく、予想外の 83 です。これを変える内部で何が起こっているのか。
その答えは、接頭辞 0 が古代の力を秘めている、数値定数の謎めいた世界にあります。デフォルトでは、C/C の数値リテラルは 10 進数 (基数 10) であると想定されます。ただし、先頭にゼロを付けると、それらは魔法のように 8 進定数に変換され、基数 8 を使用して解釈するようにコンパイラーに信号を送ります。
0123 の場合、各桁は 8 進法に従って解釈され、次の結果が得られます。次の計算:
0 = 0
1 = 1
2 = 2
3 = 3
これらの値を 3 つのグループにまとめると、次のようになります:
012 = 0 8^2 1 8 2 = 66
3 = 3
これら 2 つの値を加算すると、最終結果は 66 になります。 3 = 83.
これは、接頭辞ゼロで観察される予期せぬ動作を説明しています。これは C/C の複雑な仕組みの証拠であり、隠されたメカニズムによって驚くべき、そしてしばしば混乱を招く結果が明らかになる可能性があります。したがって、次にゼロの接頭辞が付いた数値定数に遭遇したときは、それが開く 8 進数のドアを思い出してください。これにより、コンパイルがあまり通過しないパスを通過できるようになります。
以上がC/C でプレフィックス 0 が 0123 を 83 に変えるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。