我通常使用n(数字)%2来检查它是偶数还是奇数。最近,我刚刚通过比特方式发现了另一种方法。
Future.failed
它比另一个更快吗?我应该用吗?谢谢!
答案 0 :(得分:6)
编译器可以很容易地将任一操作优化为更快的操作,因此在实践中它可能没什么区别。
我用我的gcc编译器(ubuntu上的5.3)运行了这个实验。鉴于此代码:
#include <iostream>
int main()
{
for(int i=0; i<100; ++i) {
//if(i % 2 == 0)
if(!(i & 1))
std::cout << "i is odd" << std::endl;
else
std::cout << "i is even" << std::endl;
}
}
无论我注释掉哪个if
行,产生的汇编代码都完全相同,即:
mov eax, DWORD PTR [rbp-4] # D.35290, i
and eax, 1 # D.35290,
test eax, eax # D.35290
换句话说,编译器在两种情况下都生成了比较的AND版本。这是默认优化。