为了账号安全,请及时绑定邮箱和手机立即绑定

位运算:按位与、按位或、按位异或、取反、左移、右移

标签:
Java

位运算不管是在Java语言,还是在C语言中,或者其他语言,都会经常用到。位运算主要包括按位与(&)、按位或(|)、按位异或(^)、取反(~)、左移(<<)、右移(>>)这几种,其中除了取反(~)以外,其他的都是二目运算符,即要求运算符左右两侧均有一个运算量。

1、补码
在总结按位运算前,有必要先介绍下补码的知识,我们知道当将一个十进制正整数转换为二进制数的时候,只需要通过除2取余的方法即可,但是怎么将一个十进制的负整数转换为二进制数呢?其实,负数是以补码的形式表示。其转换方式,简单的一句话就是:先按正数转换,然后取反加1。
补码

2、按位与(&)
参加运算的两个数,换算为二进制(0、1)后,进行与运算。只有当相应位上的数都是1时,该位才取1,否则该位为0。
按位与&

3、按位或(|)
参加运算的两个数,换算为二进制(0、1)后,进行或运算。只要相应位上存在1,那么该位就取1;均不为1,即为0。
按位或

4、按位异或(^)
参加运算的两个数,换算为二进制(0、1)后,进行异或运算。只有当相应位上的数字不相同时,该位才取1;若相同,即为0。
按位异或
可以看出,任何数与0异或,结果都是其本身。利用异或还可以实现一个很好的交换算法,用于交换两个数,算法如下:
swap

5、取反(~)
参加运算的两个数,换算为二进制(0、1)后,进行取反运算。每个位上都取相反值,1变成0,0变成1。
取反

6、左移(<<)
参加运算的两个数,换算为二进制(0、1)后,进行左移运算,用来将一个数各二进制位全部向左移动若干位。
左移
注意,观察可以发现,左移一位的结果就是原值乘2,左移两位的结果就是原值乘4。

7、右移(>>)
参加运算的两个数,换算为二进制(0、1)后,进行右移运算,用来将一个数各二进制位全部向右移动若干位。
右移
注意,观察可以发现,右移一位的结果就是原值除以2,右移两位的结果就是原值除以4,注意,除了以后结果没有小数位,都是取整。
Java中>>和>>>的区别:
O

  • 对于正数而言,>>和>>>没区别。
  • 对于负数而言,-2 >>> 1,结果是2147483647(Integer.MAX_VALUE);-1 >>>1,结果是2147483647(Integer.MAX_VALUE)。
    所以,要判断两个数符号是否相同时,可以这么干:
    return ((a >> 31) ^ (b >> 31)) == 0;
点击查看更多内容
2人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消