我想知道在位操作和代码长度方面哪些是最有效的计算方法(-1)^ n。
以下示例假设整数n:
int a=(n%2==0?1:-1);
int b=(n&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编译成更长的程序集,对于这些版本也是如此。