Modulus比And运算符更有效率

时间:2014-06-21 07:31:07

标签: operators bit-manipulation modulus and-operator

我今天开始使用按位运算符,我注意到&运算符可用于查找是否为偶数。

100 & 1;//Gives 0
101 & 1;//Gives 1

偶数为零而赔率为零。

所以,我现在想知道哪种方法更有效,哪种方法是偶数:

A)if (n & 1 == 0) isEven = true;

B)if(n % 2 == 0) isEven = true;

此外,是否有更有效的方法来查找某些内容是否均匀?

P.S。没有理由我需要一种有效的方法来发现某些东西是偶数,我只是真的很好奇。

2 个答案:

答案 0 :(得分:2)

编译器很聪明;如果其中任何一个实际上更快,&1%2很可能编译成相同的 - 更快 - 代码。

使用一个愚蠢的编译器,我打赌&1至少和一样快,因为它映射到位操作,这是非常几乎任何CPU的基本操作。

模块可能在某些CPU上同样快,但在低成本嵌入式CPU上绝对不是这样。

答案 1 :(得分:1)

更有效的方式:

isEven = !(n & 1);

关于使用modulto操作%2左右:

在某些编译器上,它可以生成有符号整数的最长/最慢代码, 因为,例如:

-5 % 2 == -1

对于无符号“n”,通常编译器为两个操作生成相同的代码:

n % 2
n & 1