是否有比下例中的符号将符号除以2更快的方法?
...
mov ecx, 2
idiv ecx
push eax #push the result
...
最佳答案
当然:
sar eax, 1
sar
操作码与shr
的不同之处在于,最高有效(符号)位保留在sar
中,并且在shr
中设置为0。 Wikipedia上的Arithmetic shift页面在一般情况下显示了有关此操作的更多详细信息。请注意,在2的补码机(x86是)上,这实际上会计算
floor(eax / 2)
。特别是,这意味着对于整数x:x = 0的
后一个结果给出的结果可能是意外的。例如,-3 sar 1产生-2,而不是-1。另一方面,3 sar 1结果为1。
关于组装快速除以2,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2036674/