判断一个数字是奇数还是偶数

时间:2016-06-01 08:54:28

标签: c++

我通常使用n(数字)%2来检查它是偶数还是奇数。最近,我刚刚通过比特方式发现了另一种方法。

Future.failed

它比另一个更快吗?我应该用吗?谢谢!

1 个答案:

答案 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版本。这是默认优化。