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
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。