按位运算符比+和 - 运算符更快

Pra*_*ari -1 javascript c c++ bit-manipulation bit-shift

请参阅链接.

建议计算数字绝对值的最快方法是使用(相对困难的)按位运算符.

我知道按位运算符比除法和乘法更快.但它们是否比+和 - 运算符更快?

谢谢

Ker*_* SB 15

我相信编译器非常感谢你对这种情况的分析; 它肯定不会想到这个!

以下是海湾合作委员会对此的看法:

int myabs(int n)
{
  return n < 0 ? -n : n;   // hurray, portable code!
}
Run Code Online (Sandbox Code Playgroud)

变为:

mov edx, edi     ;; edx = x
sar edx, 31      ;; edx >>= 31
mov eax, edx
xor eax, edi
sub eax, edx     ;; eax = (x ^ (x >> 31)) - (x >> 31)
ret              ;; return eax
Run Code Online (Sandbox Code Playgroud)


Jam*_*nze 5

措施。在您感兴趣的上下文中。我曾在乘法比移位更快的机器上工作,在它根本慢得多的机器上工作。但是你不能事先说出来。就此而言,最新英特尔上最快的可能不是下一个问世最快的。(在链接的代码是那种你的东西想要做的。这不是可读,这是不可移植,甚至在那里工作的系统中,有一个很好的机会,这是不是太天真实施较慢。)