我今天开始使用按位运算符,我注意到&
运算符可用于查找是否为偶数。
100 & 1;//Gives 0
101 & 1;//Gives 1
偶数为零而赔率为零。
所以,我现在想知道哪种方法更有效,哪种方法是偶数:
A)if (n & 1 == 0) isEven = true;
或
B)if(n % 2 == 0) isEven = true;
此外,是否有更有效的方法来查找某些内容是否均匀?
P.S。没有理由我需要一种有效的方法来发现某些东西是偶数,我只是真的很好奇。
答案 0 :(得分:2)
编译器很聪明;如果其中任何一个实际上更快,&1
和%2
很可能编译成相同的 - 更快 - 代码。
使用一个愚蠢的编译器,我打赌&1
至少和一样快,因为它映射到位操作,这是非常几乎任何CPU的基本操作。
模块可能在某些CPU上同样快,但在低成本嵌入式CPU上绝对不是这样。
答案 1 :(得分:1)
更有效的方式:
isEven = !(n & 1);
关于使用modulto操作%2左右:
在某些编译器上,它可以生成有符号整数的最长/最慢代码, 因为,例如:
-5 % 2 == -1
对于无符号“n”,通常编译器为两个操作生成相同的代码:
n % 2
n & 1