C などの特定のプログラミング言語では、先頭にゼロが付加された数値が予期しない動作を示すことがよく観察されます。これらの癖を理解するために、提示した具体的なシナリオを詳しく見てみましょう。
次のコードの抜粋を考えてみましょう:
int i = 07; // i == 7 int i = 16; // i == 16 int i = 00016; // i == 14, why? int i = 05016; // i == 2574, wow ) int i = 08; // compile error, compiler expects octal number...
C では、整数リテラル10 進数、8 進数、または 16 進数で指定できます基地。先頭にゼロが付加された整数は、通常、リテラルが 16 進数を示す 0x または 0X で始まる場合を除き、8 進数リテラルとして解釈されます。
この例では、00016 は 8 進数リテラルとして解釈され、i == となります。 14. 8 進数は、0 ~ 7 の数字を使用して値を表します。先頭のゼロはリテラルの値に影響しません。
同様に、05016 も 8 進数リテラルとして解釈され、各桁に 8 の適切な累乗を乗算することで 10 進数に変換できます。これにより、 i が得られます。 == 2574.
ただし、リテラルが 0x または 0X で始まる場合は、16 進リテラルとして解釈されます。 16 進数は、0 ~ 9 の数字と A ~ F (または a ~ f) の文字を使用して値を表します。
この例では、0x16 は値 22 を表す 16 進リテラルとして解釈されます。
C 標準によれば、8 および9 は有効な 8 進数ではありません。したがって、08 は無効な 8 進リテラルであり、コンパイル中に構文エラーが発生します。
先頭にゼロが付加された数字で観察された問題は、C で整数リテラルを解釈するための特定の規則に起因しています。 。これらのルールを理解することにより (つまり、特に指定がない限り、先頭にゼロが付加された整数を 8 進リテラルとして解釈すること)、エラーを回避し、整数値を正しく処理できます。
以上がC で先頭にゼロが付加された数値が予期しない動作をするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。