剖析Java中的位运算符

位运算是直接对整数的二进制进行的运算

运算符运算范例
<<左移3 << 2 = 12 --> 3*2*2=12
>>右移3 >> 1 = 1 --> 3/2=1
>>>无符号右移3 >>> 1 = 1 --> 3/2=1
&与运算6 & 3 = 2
|或运算6
^异或运算6 ^ 3 = 5
~取反运算~6 = -7

位运算符的细节

运算符细节
<<空位补0,被移除的高位丢弃,空缺位补0。
>>被移位的二进制最高位是0,右移后,空缺位补0;最高位是1,空缺位补1。
>>>被移位二进制最高位无论是0或者是1,空缺位都用0补。
&二进制位进行&运算,只有1&1时结果是1,否则是0;
|二进制位进行|运算,只有0|0时结果是0,否则是1;
^相同二进制位进行 ^ 运算,结果是0;1 ^ 1=0 , 0 ^ 0=0不相同二进制位 ^ 运算结果是1。1 ^ 0=1 , 0 ^ 1=1
~正数取反,各二进制码按补码各位取反;负数取反,各二进制码按补码各位取反

以下三个运算均满足结合律,交换律
与(&)运算的特点:有0为0,全1为1

与运算&。与运算有以下性质。

1.一个数&1的结果就是取二进制的最末位,这可以用来判断一个数的奇偶性,二进制的最末位位0表示该数位偶数,最末位为1表示该数为奇数

0001 0101 & 0000 0001 = 0000 001

2.置位归零:使一个二进制数中的某一位/某几位归零,而其余数位不受影响。将欲归零的数位应置0,其余数位置1

0001 0101 & 1111 1111 = 0001 0101

3.巧用取模:因为位运算比%(取模)运算快,所以可对一下代码进行优化

x=x%2;
// 可以进行优化
x=x&1;

4.取一个数中指定位:举例:取1010 1110的低四位,则可通过以下运算得到

1010 1110 & 0000 1111 = 0000 1110

或(|)运算的特点:有1为1,全0为0

或运算|。或运算有以下性质。

1.对一个数据的某些位置 1,将1010 0000的低四位置1

1010 0000 | 0000 1111 = 1010 1111

异或(^)运算的特点:同为0,异为1

异或运算⊕。异或运算有以下性质。

1.任何数和0做异或运算,结果仍然是原来的数,即 a⊕ 0=a。
2.任何数和其自身做异或运算,结果是0,即 a⊕ a=0。
3.异或运算满足交换律和结合律,即 a⊕b⊕a = b⊕a⊕a = b⊕(a⊕a)=b⊕ 0=b。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值