Java位运算符详解及其简单常见应用

1.位运算符种类介绍

按位与:&
按位或:|
按位异或:^
求反:~ (ps:这里指的是一次求反)
向左移位:<<
向右移位:>>

位运算符应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型,在这里我们就不在意具体位数,只讲原理,具体补0位数和转换成二进制数要根据数据类型字节长度。并且,按位与(&)和按位或(|)不适用与布尔类型,在布尔类型中,两者会成为逻辑运算符

要将位运算符,首先我们需要对二进制的原码,补码和反码有一定的了解,下面简单提一下
在计算机中,我们的数都是变为二进制来存储,而二进制就可以表示我们的原码,反码和补码。
原码就是转化成的二进制数。
正数的原码,反码,补码都相同,负数的反码等于原码按位取反,符号位不变,负数的补码等于负数的反码+1
例如:原码:0101 0101
反码:0101 0101
补码:0101 0101

原码: 1010 1010
反码: 1101 0101
补码: 1101 0110

2.位运算符详解

1.按位与(&):对两个二进制值进行按位与的操作,会依次从右到左进行一位一位的比较,两个值同为1时得到的位即为1,否则为0,符号位也要参与计算。例如:
ob = 101010
op = 101001001
result = ob & op
先将ob补成同长度,ob = 000101010,当ob和op进行按位与操作,因为从右开始,第一位ob=0,op=1,所以得到第一位为0,依次下去,得到最终结果为result = 000001000。

2.按位或(|):对两个二进制值进行按位或操作,依次从右到左进行按位比较,两个值有一个1得到结果位为1,否则为0,符号位也参与计算。例如:
ob = 11110001
op = 10110111
result = ob | op
从右边开始找,有1为1,无1为0,所以可以得到结果位result = 11110111。

3.按位异或(^):两个二进制数,位数相同为0,否则为1,符号位参与计算。例如:
ob = 10101010
op = 01010101
result = ob ^ op
从右开始,一个0一个1结果为0,否则为1,所以可以得到result = 00000000。

4.取反(~):将一个二进制数的每一位数值取反,注意:位运算符中取反不是取反码,符号位参与计算。例如:
ob = 10101010
result = ~ob
每一位取反,0变1,1变0,所以最后得到result = 01010101

5.向左移位(<<):左移运算是将一个二进制位的操作数按指定移动的位数向左移动,移出位被丢弃,右边移出的空位一律补0。例如:
ob = 1111 1101
result = ob << 1

得到结果应该是result = 1111 1010

6.向右移位(>>):右移运算是将一个二进制位的操作数按指定移动的位数向右移动,左边空位补符号位,正数的符号位为0,负数的符号位为1。例如:
ob = 1111 1101
result = ob >> 1
带符号数,空位补符号位,得到result = 1111 1110。

7.向右移位补零(>>>):将一个二进制位的操作数按指定移动的位数向右移动,左边空位补0。例如:
ob = 1111 1101
result = ob >> 1
空位补0,得到result = 0111 1110。

以上是七种位运算符的解释,下面我们来讲一些简单的应用

1.按位与(&)

1.迅速清零:例如:
ob = 1010 1010 ,要想对ob进行快速清零,只需要设置一个数op = 0101 0101,两者进行&运算即可。原理就是利用&中同1为1的原理,只需设置一个和ob中1的位数为0的数即可,其他位随意。

2.保留指定位置:保留哪位,对应位就设为1,例如:
ob = 1111 0000 ,想要保留第4位,即设一个op = 0001 0000,两者进行&运算,得到 0001 0000。

3.判断奇偶性:a&1。当a为奇数,得到的结果为1,为偶数,得到结果为0,例如;
a = 0000 1101 = 13
a&1 = 0000 1101 & 0000 0001 得到0000 0001 结果为1,偶数同样的方法可证。

2.异或(^)

1.定位翻转 要使哪几位翻转就将与其进行∧运算的该几位置为1即可,例如
ob = 1111 0000
设op = 1010 1010
得到翻转结果为 0101 1010

2.交换两个值,用异或来实现。例如:
ob = 1010 1010
op = 0101 0101

只需进行三步操作

ob = ob ^ op //得到 ob = 1111 1111
op = op ^ ob //得到 op = 1010 1010
ob = ob ^ op //得到 ob = 0101 0101
三步进行完,你会发现就转变完成了

3.移位==乘除(<</>>>)

移位运算其实可以等同于乘除法,并且它比乘除法更快,更效率

例如:
ob = 0000 0100 = 4
要乘2 ,左移1位(原理,左移N位,即乘2的N次方)
ob = ob << 1
得到ob = 0000 1000 = 8

右移(右移清零)等同除法

总之,位运算符的应用方法还有N多,这里就不一一举例了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值