bru*_*eck -3 c++ bit-manipulation
我想知道哪些是在位操作和代码长度方面计算(-1)^ n的最有效方法.
以下示例假设整数n:
int a=(n%2==0?1:-1);
int b=(n&1?-1:1);
Run Code Online (Sandbox Code Playgroud)
我不关心理解代码的简易性.
int f(int n) {
return n % 2 ? -1 : 1;
}
int g(int n) {
return n & 1 ? -1 : 1;
}
Run Code Online (Sandbox Code Playgroud)
部件:
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
Run Code Online (Sandbox Code Playgroud)
这相当于功能:
int h(int n) {
return -(n & 1) | 1;
}
Run Code Online (Sandbox Code Playgroud)
有趣的是,gcc编译器4.4.7到5.3编译成更长的程序集,这些版本相同.