天天看点

实用的位运算应用

对于位运算,之前在一篇博文中分享了一下在c语言和oracle中的位运算实现 http://blog.itpub.net/23718752/viewspace-1440273/

但是关于位运算的实际应用还是有感觉有些空中楼阁,理论提升到一定的高度,但是实际应用无从下手的话,本身没有太大的实际意义。

教科书中有一个章节是关于位运算的应用,但是其中的例子,感觉不是很通俗,整理了一些小例子,感觉还是比较实用的。

1.变量交换

这个例子在笔试面试中可能还会考到,不需要设置临时变量,怎么快速交换两个变量的值。比如a=100,b=200;

采用下面的方式,就会交换变量的值,最后的输出是200,100

a ^= b;

b ^= a;

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