ITPub博客

首页 > 应用开发 > IT综合 > 实用的位运算应用

实用的位运算应用

原创 IT综合 作者:jeanron100 时间:2015-04-05 22:07:12 0 删除 编辑
对于位运算,之前在一篇博文中分享了一下在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<<31)-1
结果就是2147483647,这样看起来是不是就清晰多了。
在java中,  (1<<31)-1 可以等价于 -(1<<-1) - 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

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23718752/viewspace-1503921/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
技术文章每天更新,阵地已转移到微信公众号端。 公众号:jianrong-notes

注册时间:2012-05-14

  • 博文量
    1498
  • 访问量
    14268622