• 締切済み

phpのfor文先頭の式内での0x1、0x2とは

phpのfor文に関して質問させて頂きます。 phpのリファレンスを見ていて、分からない事があります。 [ PHP マニュアル > 言語リファレンス クラスとオブジェクト ] http://php.net/manual/ja/language.oop5.php こちらの「User Contributed Notes」の14 redrik at gmail dot comの中に、以下のようなfor文があります。 class FlagsEnum extends Enum { public function __construct( /*...*/ ) { $args = func_get_args(); for( $i=0, $n=count($args), $f=0x1; $i<$n; $i++, $f *= 0x2 ) $this->add($args[$i], $f); } } この for( $i=0, $n=count($args), $f=0x1; $i<$n; $i++, $f *= 0x2 ) の部分ですが、結果を見ると、$fの値を2倍しながらループさせるという感じなのですが、それであれば、なぜ for( $i=0, $n=count($args), $f=1; $i<$n; $i++, $f *= 2 ) と書かないのでしょうか? もしかすると値を単純に2倍にしているわけではないのでしょうか? 詳しい方がいらっしゃいましたら、ご教示を宜しくお願いいたします。

みんなの回答

  • Gotthold
  • ベストアンサー率47% (396/832)
回答No.2

0xから始まるのは16進数表記の整数リテラルです。 PHP: 整数 - Manual http://php.net/manual/ja/language.types.integer.php なので、  for( $i=0, $n=count($args), $f=0x1; $i<$n; $i++, $f *= 0x2 ) と  for( $i=0, $n=count($args), $f=1; $i<$n; $i++, $f *= 2 ) は同じことを違う書き方で書いているだけです。 どちらの書き方をするかはどちらが分かりやすいかという ソースコードの見た目だけの問題です。 なので、16進数表記で書かれているのは 書いた人がそっちの方が分かりやすいと思ったというだけです。 (たぶん16進数の方がビットフラグを処理しているという意図が分かりやすいと思ったのでしょう。 私なら、ビットを意識するならかけ算のところもビットシフトにしますが。)

すると、全ての回答が全文表示されます。
noname#244856
noname#244856
回答No.1

16進数で書いても10進数で書いても同じです。全て同じ「整数」として扱われます。特に意味は無いでしょう。 私だったらビットシフトで書きますかねぇ…多分これが一番意図が分かりやすいと思うので。 for( $i=0, $n=count($args), $f=1; $i<$n; $i++, $f <<= 1 )

chiku-san
質問者

お礼

ありがとうございます! 意図を表現しようとしている訳ですね。 ビットシフト、勉強になりました。 http://php.net/manual/ja/language.operators.bitwise.php ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A