在C ++中计算(-1)^ n的有效方法

时间:2016-05-30 23:48:17

标签: c++ bit-manipulation

我想知道在位操作和代码长度方面哪些是最有效的计算方法(-1)^ n。

以下示例假设整数n:

int a=(n%2==0?1:-1);
int b=(n&1?-1:1);

我并不关心理解代码的简易性。

1 个答案:

答案 0 :(得分:5)

使用gcc 6.1 both produce the same assembly

f(int):
        movl    %edi, %eax
        andl    $1, %eax
        negl    %eax
        orl     $1, %eax
        ret
g(int):
        movl    %edi, %eax
        andl    $1, %eax
        negl    %eax
        orl     $1, %eax
        ret

大会:

int h(int n) {
  return -(n & 1) | 1;
}

这相当于功能:

{{1}}

有趣的是,gcc编译器4.4.7到5.3编译成更长的程序集,对于这些版本也是如此。