Java中的按位与(&)、按位或(|)、异或(^)等运算符
下文笔者讲述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
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


