目录
前言
位运算符有 与(&)、或(|)、异或(^)、取反(~)、左移(<<)、右移(>>)、无符号右移(>>>)。位运算其实就是二进制的运算,加减乘除适用于十进制,而位运算就是二进制的运算。如果是非二进制数使用位运算符,系统会自动转换成二进制再进行运算。
//使用Integer的toBinaryString(...)方法打印计算的二进制值
System.out.println(Integer.toBinaryString(~11));
运算符
1、与(&)
概念:两个操作数中的位都为1,结果才为1,否则结果为0。如下图
代码实践结果 | 运算过程 |
2、或(|)
概念:两个操作数中的位只要有一个为1,那么结果就是1,否则就为0。如下图
代码实践结果 | 运算过程 |
3、异或(^)
概念:操作数中的位相同,则结果为0,不同则结果为1。如下图
代码实践结果 | 运算过程 |
4、取反(~)
概念:操作数中的位,如果是1,取值0;如果是0,取值1。如下图
代码实践结果 |
运算过程 |
注意:正数的补码,反码都是其本身。
5、左移(<<)
概念:左移就是把所有位向左移动指定的位。如下图
代码实践结果 | 运算过程 |
6、右移(>>)——有符号
概念:左移就是把所有位向右移动指定的位(负数右移有5步)。如下图
正数或负数 | 代码实践结果 | 运算过程 |
正数 | ||
负数 | ||
负数 |
7、无符号右移(>>>)
概念:“无符号”右移位运算符 >>>(不保留最高位符号位,最高位始终补 0)比如:9 >>> 2
1. 将
0000 0000 0000 0000 0000 0000 0000 1001 进行右移两位,高位补 0
2. 结果为:0000 0000 0000 0000 0000 0000 0000 0010 = 2
比如:-9 >>> 2——负数是正数反码后的补码右移。
1. 先将 -9的绝对值转为二进制:
0000 0000 0000 0000 0000 0000 0000 1001
2. 反码: 1111 1111 1111 1111 1111 1111 1111 0110
3. 补码(将反码后的值加 1):1111 1111 1111 1111 1111 1111 1111 0111
4. 进行右移两位,高位补零
5. 结果为:0011 1111 1111 1111 1111 1111 1111 1101 = 1073741821