0

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

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

0 表示偶数,1 表示赔率。

所以,我目前想知道哪种方法可以更有效地查找是否是偶数:

一种)if (n & 1 == 0) isEven = true;

或者

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

另外,是否有更有效的方法来查找是否是偶数?

PS没有理由我需要一种有效的方法来查找某事物是否为偶数,我只是真的很好奇。

4

2 回答 2

2

编译器非常聪明。如果其中任何一个在实践中实际上更快,那么两者都&1%2很可能编译为相同的 - 更快的 - 代码。

&1使用愚蠢的编译器,我敢打赌至少与替代方案一样快,因为它映射到位操作,这对于几乎任何 CPU 来说都是非常基本的操作。

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

于 2014-06-21T07:44:52.737 回答
1

更有效的方法:

isEven = !(n & 1);

关于使用 modulto 操作 %2 等:

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

-5 % 2 == -1

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

n % 2
n & 1
于 2014-07-03T19:51:37.007 回答