07/05/01 17:51:05
昔、if (x || y || z) よりも if ((x | y | z) != 0) の方が
速くなる可能性がある(コメント必須)という話があったが
if (memcmp(p, "924", 3) != 0) より
if (p[0] != '9' || p[1] != '2' || p[2] != '4') より
if ((p[0] ^ '9' | p[1] ^ '2' | p[2] ^ '4') != 0) の方が
速くなる可能性もあるのかな。(コメント絶対必須で)
もちろん、ショートサーキットの起こる率によっても違うだろうが。
まあ、このケースに限れば(バスエラーが起きない状況なら)
if (*(DWORD *)p & *(DWORD *)"\xFF\xFF\xFF" == *(DWORD *)"924")
の右2つを整数定数に変えたものが最速か。
もちろん、このコードは移植性も無いし可読性もない
最悪のコードではあるのだが。