在汇编中,除以2并保留符号的方法是否比下面示例中的更快?
...
mov ecx, 2
idiv ecx
push eax #push the result
...
sar eax, 1
sar
操作码与 shr
操作码的区别在于,在 sar
中最高位(符号位)被保留,而在 shr
中它被设置为 0。维基百科上的算术移位页提供了更详细的关于这个操作的一般性背景。
请注意,在二进制补码计算机(如 x86)上,这实际上计算的是 floor(eax / 2)
。特别地,这意味着对于整数 x:
后者的结果可能会出乎意料。例如,-3 sar 1 的结果为 -2,而不是 -1。另一方面,3 sar 1 的结果为 1。