位操作的实用功能

利用位操作实现简单的功能

位操作虽然会降低程序的可读性,但是我想,热衷于位操作的人大概都是被它的效率所吸引了。如果某些简单但常用的功能可以利用位操作实现,且用位操作实现的代码量相同或更少,我希望让这些位操作得到普及。


在介绍之前,先列举一下位操作符

a&b      //按位与
a|b      //按位或  
a^b      //按位异或 
~a       //按位取反    
a<<b     //左移
a>>b     //有符号右移
a>>>b    //无符号右移            



1. 交换两个整数的值

刚开始接触编程的时候我以为交换两个变量一定需要一个临时变量,但是利用位操作交换两个整数不必需要第三个变量。请看下面的例子:

int a = 9;
int b = 11;

a=a^b;           //1001^1011=0010
b=b^a;           //1011^0010=1001
a=a^b;           // 0010^1001=1011

如此便可以交换两个整数的值而不必用第三个参数



2.快速判断两个值时候相等
在学汇编的时候我们也是用xor ax,ax来置零,而并非sub ax,ax。同样道理,要判断两个int数字a,b是否相等,很多人会想到判断a - b == 0,但是如果判断a ^ b == 0效率将会更高。



3.判断奇偶性
利用位操作判断奇偶性可以写成

int a=5;
return a&1;   //偶数返回0,奇数返回1



4.除以2 & 乘以2

int a=5;
a>>1;    //除以2
a<<1;    //乘以2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值