Java学习笔记-运算符-位运算符

这个问题作为基础问题中的“黑洞”,很容易被我们忽略。在重新学习Java的过程中,我重新认识到了这个问题。

我们为什么要学习这个问题?
位运算符的运算效率要比直接对数字进行加减乘除要有效地多。在一些对性能极致要求的环境下,大佬通常喜欢使用位运算符0.0

位运算符
Java位运算是针对于整型(byte,short,int,long)数据类型的二进制进行移动操作。计算机表示的数字正负不是用±来表示,而使用最高位数字来表示,0表示正,1表示负。
常见的位运算符为:

<<:左移,空位补0,被移除的最高位丢弃。
>>:右移,被移位的最高位是0,右移后,空位补0,反之补1。
>>>*:被移位的二进制最高位无论是0还是1,空缺位都用0补充。
&:任何二进制和0进行&运算,结果都是0。
|:任何二进制和0进行|运算,结果都是原值。
^:异或运算,如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同则异或结果为0。

常见使用场景
场景1:判断奇偶数
a&1,若结果是0,则a是偶数,结果是1,a是奇数。
若a为8,即1000,a&1=1000&0001=0000。
若a为9,即1001,a&1=1001&0001=0001。
原理是二进制数字的进位分别是1、2、4…只有第一位是1,所以与&1,当为0的时候,一定是奇数,反之为偶数。

场景2:交换数据
在不使用临时变量的前提下,要求两个int类型的变量x与y进行数字上的交换
x^=y;
y^=x;
x^=y;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值