码迷,mamicode.com
首页 > 其他好文 > 详细

位运算可以实现哪些功能

时间:2015-02-03 11:06:51      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:位运算   按位与   异或   按位取反   

位运算可以实现哪些功能

    

     许多时候,我们为了减少算法的时间复杂度,都是推荐使用位运算,今天我们整理一下位运算可以实现哪些功能。


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; 
}


    这些基本的数学运算都是可以通过为运算符来实现,时间复杂度都比较低,以后常用。




位运算可以实现哪些功能

标签:位运算   按位与   异或   按位取反   

原文地址:http://blog.csdn.net/puqutogether/article/details/43446413

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!