GB)で、結果は次の通りです。3回実行したときの時間を計測しました。方が速いけれど,最適化すると,論理演算の方がかなり速くなるという結果に。おー......再現した(これが本当の原因かは分からないけど)。最適化によってどんなコードが生成されているか見てみることにします。全部掲載すると長くなっちゃうので,一部だけ。オプションを指定してアセンブリを出力することができます。-Sまず,最適化なし。コードそのまんまなので,順番に丁寧に見ていけばどういう処理をしているか分かると思います。変わったコードは出力されていません。最適化したときのコード。L33えっと......強調したところを抜き出しますね。レジスタに0を代入して,次にこいつをインクリメントします。ラベルにジャンプする......と,こんな具合です。書くとこんな感じです。}ということで,最適化の結果,バイト入れ替えの演算がごっそりとなくなってしまったのでした。for-文をクルクル回してるだけだもん。どこからも参照していないから,最適化の過程で「いらない処理」として省かれちゃったんですね。箇所は,ループの構造が少し変わっただけで,基本的な処理は残っています。ゆことで,論理演算の方が速いという結果が出るケースのひとつとして,最適化されてコードがなくなっちゃった可能性が挙げられます。これがテストになっていないことは明白なわけですが。これだけが速くなる原因かというと,それは分かりません。本当に速くなるケースがあるかもしれない。最適化オプションを付けた速度テストはとても難しいので,基本は付けない方がいいんだと思います。参照する命令(値を出力するするとか,他の変数に代入するとか)をひとつ加えておけば,ある程度抑制することができます。これでも足りない場合はあって,上のように即値(リテラル)を初期値として与えたような場合は,コンパイル時にあらかじめ計算しておくことで定数化してしまう最適化もあります。参照するコードがあっても,コンパイラが自分で計算してしまうかもしれない。そのものとは関係なくなっちゃったけれども,そんな感じ。