位运算可以实现哪些功能
许多时候,我们为了减少算法的时间复杂度,都是推荐使用位运算,今天我们整理一下位运算可以实现哪些功能。
1. 乘除2
左移1位乘以2,左移n位乘以2^n;
右移1位除以2,右移n位除以2^n;
举个例子:
#include<iostream> using namespace std; int main() { int a = 16; int b = 25; //乘除2 cout<<(b<<1)<<' '<<(a>>1)<<endl; return 0; }
2. 判断奇偶数
用到位运算中的按位与,和1按位与。
如下:
#include<iostream> using namespace std; int main() { int a = 16; int b = 25; // 判断奇偶数 if(a & 1) cout<<"Odd"<<endl; else cout<<"Even"<<endl; return 0; }
3. 取余运算
还是使用按位与运算符,只不过不再是和1按位与了。
#include<iostream> using namespace std; int main() { int a = 16; int b = 25; // 取余 cout<<(a & 3)<<endl; // 除以4的余数 cout<<(a & 7)<<endl; // 除以8的余数 cout<<(a & 8)<<endl; // 无效,只能运算2的次幂的余数 return 0; }
分析:注意这个方法只能计算2的次幂的余数,而且参加按位与的只能是2^n-1,因为这些数的二进制形式全是1.
4. 求相反数
使用按位取反运算符。
//求相反数 cout<<(~a+1)<<endl;
5. 求绝对值
使用异或运算符(^)
#include<iostream> using namespace std; int main() { int a = -36; int b = 25; // 绝对值 int tmp = a>>31; // /a大于等于0时tmp为0,a小于0时tmp为-1 int A = (a^tmp)-tmp; cout<<A<<endl; return 0; }
这些基本的数学运算都是可以通过为运算符来实现,时间复杂度都比较低,以后常用。
时间: 2024-12-10 20:05:08