Java中的按位与(&)、按位或(|)、异或(^)等运算符

乔欣 Java教程 发布时间:2023-03-24 21:42:01 阅读数:15270 1
下文笔者讲述Java中按位或、与、异或运算符的示例说明,如下所示

按位与运算符(&)

参入与运算的两个数据
   按二进制位进行“与”运算。

运算规则:
   0&0=0; 0&1=0; 1&0=0; 1&1=1;

 两位同时为“1”,结果才为“1”,否则为0

例:
  3&5:
   0000 0011 & 0000 0101 = 0000 0001
 即:
	3&5的值为1
 另:
  负数按补码形式参加按位与运算。

“与运算”的使用场景

(1)清零,
    当我们想将一个单元清零
     即使其全部二进制位为0
       只要与一个各位都为零的数值相与,结果为零 

(2)取一个数中指定位
    方法:
	  找一个数,对应X要取的位,
	  该数的对应位为1,其余位为零
	  此数与X进行“与运算”可以得到X中的指定位。

例
  a=10101110
  取a中的低4位
  使用 a & 0000 1111 = 0000 1110 

按位或运算符(|)

参加运算的两个对象
   按二进制位进行“或”运算

运算规则:
   0|0=0;
   0|1=1;
   1|0=1;
   1|1=1;

运算规则说明:
   参与运算的位,只要有一个位为1,则返回1
3|5:
 0000 0011 | 0000 0101 = 0000 0111

所以
  3|5值等于7

另:
  负数按补码形式参加按位或运算

“或运算”的使用场景

检测一个数据指定位置上是否为1 

异或运算符(^)

两个数据
   按二进制位进行“异或”运算 

运算方式:
   0^0=0
   0^1=1
   1^0=1
   1^1=0

运算规则:
    参加运算的两个对象
    当两个相应位为“异”(值不同),则该位结果为1,否则为0

“异或运算”的使用场景

1.特定为找数,在一些算法中经常使用
   对应X要翻转的各位
   该数的对应位为1
   其余位为零
   此数与X对应位异或即可 

例:
   X=10101110
  使X低4位翻转
    用X ^ 0000 1111 = 1010 0001即可得到。

2.与0相异或,保留原值
  X ^ 0000 0000 = 1010 1110。

取反运算符(~)

1.将一个数转换为二进制
2.按二进制位进行“取反”运算

运算规则:
  ~1=0
  ~0=1 

即:
  对一个二进制数按位取反,即将0变1,1变0。
  使一个数的最低位为零,可以表示为:a&~1 

1的值为1111111111111110
再按“与”运算
  最低位一定为0

左移运算符(<<)

1.将一个数转换为二进制
2.全部左移若干位(左边的二进制位丢弃,右边补0)

例:
   a = a << 2 
    将a的二进制位左移2位,右补0,
左移后的效果为:  
    左移1位后a = a * 2;

注意事项:
   当左移时舍弃的高位不包含1
   则每左移一位
    相当于该数乘以2。

右移运算符(>>)

将一个数
   各二进制位全部右移若干位
   正数左补0
   负数左补1
  右边丢弃。

操作数每右移一位
   相当于该数除以2
例: a = a >> 2 将a的二进制位右移2位, 左补0 还是 补1: 需看移动的数是正数还是负数 例
-14 (即二进制的 11110010)右移两位等于 -4 (即二进制的 11111100)。
  var  temp = -14 >> 2

无符号右移运算符(>>>)

>>>运算符
   将expression1 的各个位向右移 expression2 指定的位数
   右移后左边空出的位用零来填充
   移出右边的位被丢弃
 var  temp = -14 >>> 2

变量 temp 的值为 -14 
  (即二进制的 11111111 11111111 11111111 11110010)
     向右移两位后等于 1073741820
  (即二进制 00111111 11111111 11111111 11111100) 

复合赋值运算符

我们将
   位运算符和赋值运算符一起使用
   即可组成一个新的复合赋值运算符 

复合赋值运算符的示例

&= 
  例:a &= b 相当于a=a & b

|= 
  例:a |= b 相当于a=a | b

= 
  例:a >>= b 相当于a=a >> b

<<= 
  例:a <<= b 相当于a=a << b

^= 
  例:a ^= b 相当于a=a ^ b
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaCourse/202303/6142.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者