文章目录
Java 位运算符详解前情提要:一、简介二、如何区分 &,|,^ 是逻辑运算符还是位运算符?三、例子按位与 &按位或 |按位异或 ^按位取反 ~左移 <<右移 >>无符号右移 >>>Java 位运算符详解
前情提要:
因为位运算符是按照二进制位操作
整数
的, 涉及到 二进制 和 整数存储方式(原码、反码、补码)不懂的话可以参考 计算机底层如何存储不同的数据
一、简介
位运算符的运算过程都是基于补码运算,但是看结果,我们得换成原码,再换成十进制看结果从二进制到十进制都是基于原码byte、short、char 在使用 位运算时 按照 int 类型处理位运算直接对二进制进行位移操作实现数值运算,所以运算效率高位运算符:是按照
二进制位
进行运算的运算符, 左右两边都是整数。
二、如何区分 &,|,^ 是逻辑运算符还是位运算符?
如果操作数是boolean类型,就是逻辑运算符,如果操作数是整数,那么就位运算符。
三、例子
按位与 &
运算规则:对应位都是
1
才为1
正数运算
9 & 7 // 结果 1
负数运算
-9 & 7 // 结果 7
按位或 |
运算规则:对应位只要有
1
即为1
正数运算
9 | 7 // 等于 15
负数运算
-9 | 7 // 结果 -9
按位异或 ^
运算规则:当两位相同时返回
0
,不同时返回1
正数运算
9 ^ 7 // 结果 14
负数运算
-9 ^ 7 // 结果 -16
按位取反 ~
运算规则: 将操作数的每个位(包括符号位)全部取反
正数运算
~9 // 结果 -10
负数运算
~-9 // 结果 8
左移 <<
运算规则:实际操作的是位,可以理解为左移几位就相当于乘以
2
的几次方
3 << 4 // 类似于 3 * 2的4次 = 3*16 = 48
-3 << 4 // 类似于 -3 * 2的4次 = -3*16 = -48
右移 >>
运算规则:实际操作的是位,可以理解为除以
2
的n
次幂,如果不能整除,向下取整
69 >> 4 // 类似于 69 / 2的4次 = 69/16 = 4
-69 >> 4 // 类似于 -69 / 2的4次 = -69/16 = -5
无符号右移 >>>
运算规则:实际操作的是位,不看符号位
正数:和右移一样
负数:右边移出去几位,左边补几个0,结果变为正数
69 >>> 4 // 类似于 69 / 2的4次 = 69/16 = 4
-69 >>> 4 // 结果 268435451