以下の例よりも、アセンブリで2で割るより速い方法はありますか?
...
mov ecx, 2
idiv ecx
push eax #push the result
...
もちろん:
sar eax, 1
オペコードは、最上位(符号)ビットがに保持され、で0に設定されるという点でsar
異なります。ウィキペディアの算術シフトページには、一般的なコンテキストでのこの操作に関する詳細が示されています。shr
sar
shr
2の補数マシン(x86)では、これは実際にを計算することに注意してくださいfloor(eax / 2)
。特に、それは整数xの場合:
後者の結果は、予期しない結果をもたらす可能性があります。たとえば、-3 sar 1は、-1ではなく-2になります。一方、3sar1は1になります。