对于位运算,之前在一篇博文中分享了一下在c语言和oracle中的位运算实现 http://blog.itpub.net/23718752/viewspace-1440273/
但是关于位运算的实际应用还是有感觉有些空中楼阁,理论提升到一定的高度,但是实际应用无从下手的话,本身没有太大的实际意义。
教科书中有一个章节是关于位运算的应用,但是其中的例子,感觉不是很通俗,整理了一些小例子,感觉还是比较实用的。
1.变量交换
这个例子在笔试面试中可能还会考到,不需要设置临时变量,怎么快速交换两个变量的值。比如a=100,b=200;
采用下面的方式,就会交换变量的值,最后的输出是200,100
a ^= b;
b ^= a;
a ^= b;
2.数据类型的范围
对于开发语言中的数据类型范围,比如我们说范围是2^31-1,我们可能没有什么概念,我们可以通过位运算来很方便地得到结果。
比如2^31-1的结果,可以采用如下的方式来实现。
(1
结果就是2147483647,这样看起来是不是就清晰多了。
在java中, (1
3.判断奇偶性
可以使用(n & 1) == 1 来判断是否为奇数还是偶数,返回true则为奇数,false则为偶数。
比如我们输入n=56757568,则返回false
4.比较两个数的大小
比较两个数可以通过下面的形式来完成大小的比较,感觉有些复杂,但是算是通用的版本。
y&((x-y)>>31) | x&(~(x-y)>>31)
比如我们输入x=3,y=2 则返回 3
如果需要返回两个数中较小的数,则简单改动一下即可。
x&((x-y)>>31) | x&(~(x-y)>>31)
比如我们输入x=3,y=2,则返回2
5.两个数的平均数
如果需要求得两个数的平均数,可以通过下面的形式来完成。
(x+y) >> 1
如果x=21,y=41, 则平均数的结果为31