12

次の結果が 34 になるのはなぜですか? 8進数とは何の関係もないようです。

intval(042);
4

5 に答える 5

18

しかし、先頭の 0 は多くの言語で 8 進数を示しています。

于 2011-06-15T04:15:41.107 に答える
2

これは 8 進数と関係があり042、8 進数として解釈されます。424 * 8 + 2 = 34

PHP スクリプトのロード中に数値リテラルが解析されると、8 進数の解釈が行われることに注意してください。値はすでに整数であるため、ここでは何もしintval()ません。

8 進数の解釈は、文字列を整数にキャストする場合ではなく、数値リテラルでのみ行われます。

intval(042)   // == 34
intval('042') // == 42
(int)'042'    // == 42
于 2014-08-15T11:19:28.373 に答える
0

この関数に先頭に「0」が付いた文字列値を渡すときは注意してください。「042」を指定すると、BASE 8-9として扱われ、デフォルトの基数である10進値に変換されます。

これを通過してください

于 2011-06-15T04:27:03.353 に答える
0

それは単に関数がどのように定義されているかです。先頭のゼロは、接頭辞としての 0x が 16 進数を意味するのと同様に、それを 8 進数として解析する命令です。詳細については、ドキュメントを参照してください

于 2011-06-15T04:17:28.657 に答える