1. 使用位运算来判断奇偶数
我们常用
a%2==0来进行奇偶数判断。但众所周知,C++的取模运算的时间复杂度会远远大于位运算
因此,我们可以改用如下代码片段来进行奇偶判断
示例代码
#include...
using namespace std;
int main(){
string num; //对于位数很大的数进行奇偶判断
cin >> num;
cout << ((num.back() - '0') & 1) << endl; //只取最后一位进行判断
}原理
a=5 bin(a)= 0101 a&1= 0001 (int)=1
b=6 bin(b)= 0110 b&1= 0000 (int)=0
bin(1)= 0001 *即当二进制数位上同为 1 时才为 1据此,我们可以更高效的判断奇偶数
2. 使用位运算来判断是否为2的n次幂
在C++中判断一个数是否为
2的n次幂,你的想法是循环循环除以2直到完全除尽?
事实上,我们也可以使用 位运算 来判断一个数是否为2的n次幂。
示例代码
#include...
using namespace std;
int main(){
int num;
cin >> num;
cout << (num & (num - 1) ? "No" : "Yes") << endl;
}原理
*如 1 中解释,二进制数位上同为 1 时才为 1
a=8 bin(8)= 1000 bin(8-1)= 0111 8&8-1= 0000 (int)=0
b=10 bin(10)= 1010 bin(10-1)= 1001 10&10-1= 1000 (int)=8 != 0
所以当 num&(num-1) 为 0 时,该数是 2 的 n 次幂Last updated on