位运算可以实现哪些功能
许多时候,我们为了减少算法的时间复杂度,都是推荐使用位运算,今天我们整理一下位运算可以实现哪些功能。
左移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; 
}
用到位运算中的按位与,和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; 
}
还是使用按位与运算符,只不过不再是和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; 
}
使用按位取反运算符。
//求相反数 cout<<(~a+1)<<endl;
#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; 
}这些基本的数学运算都是可以通过为运算符来实现,时间复杂度都比较低,以后常用。
原文地址:http://blog.csdn.net/puqutogether/article/details/43446413