if( A & 0x00ffffff == B & 0x00ffffff )
先輩のソースみてたら
if( A & 0x00ffffff == B & 0x00ffffff )
って書いてあった。やりたい事は、下位24ビットのみで イコール判定
でもなんか 違和感感じた
頭の古いわたしには
if((A^B) & 0x00ffffff )
ってソースが一番に浮かぶ
if((A-B) & 0x00ffffff )
は、ダメだと思う多分。符号とか考えると
if( A & 0x00ffffff == B & 0x00ffffff )
が、可視性が高いが、
if((A^B) & 0x00ffffff )
の方が 感覚的に速いが、コンパイラの最適化でどうなるか?
って事で 最適化オプションつけて アセンブラ比較 in VisualStudio2010 Pro
;if( A & 0x00ffffff == B & 0x00ffffff )
mov edx,dword ptr [A]
mov ecx,word ptr [B]
and edx,0FFFFFFh
mov eax,r13d ; eax <- 0
cmp edx,ecx
sete al
test eax,0FFFFFFh
jne hoge
;if((A^B) & 0x00ffffff )
mov ecx,word ptr [A]
xor ecx,dword ptr [B]
test ecx,0FFFFFFh
jne hoge
おまけ
;if((A-B) & 0x00ffffff )
mov ecx,word ptr [A]
mov eax,dword ptr [B]
sub eax,ecx
test eax,0FFFFFFh
jne hoge
if((A^B) & 0x00ffffff )
が速いし アセンブラレベルだと可視性が高い
やはり アセンブラの最適化はすごいが、感覚的に速いコードの方が速い事が多いね