按位或: 以下结果 = 7
int i = 3 | 4;
按位或:只要有1个数为1,才为1
3 的二进制: 00000000 00000000 00000000 00000011
4 的二进制: 00000000 00000000 00000000 00000100
3 | 4按位或: 00000000 00000000 00000000 00000111

按位异或: 以下结果 = 7
int i = 3 ^ 4;
按位异或:两个不一样的时候才为1
3 的二进制: 00000000 00000000 00000000 00000011
4 的二进制: 00000000 00000000 00000000 00000100
3 ^ 4按位异或: 00000000 00000000 00000000 00000111

按位取反: 以下结果 = - 4
int i = ~3;
按位取反: 1 变 0、 0 变 1
3 的二进制:00000000 00000000 00000000 00000011
取反: 11111111 11111111 11111111 11111100
但是这里要记住,取反的结果也是补码的形式,我们来从补码转一波源码
补码:11111111 11111111 11111111 11111100
补码 - 1 的反码
反码:11111111 11111111 11111111 11111011
反码除符号位置不变,其他1变0、0变1,得原码
原码:10000000 00000000 00000000 00000100
左移动: 以下结果 = 12,空出位置用0补全
int i = 3 << 2;
左移:往左边移动两位,最左边的数就被挤掉了,右边就空出了两位,用0补全。
3 的二进制:00000000 00000000 00000000 00000011
3 << 2: 00000000 00000000 00000000 00001100
右移动: 以下结果 = 0,空出的位置根据符号位补全
int i = 3 >> 2;
右移:往右边移动两位,右边的数就被挤掉了,左边空出两位,用符号位置填充,符号为1就用1填充,是0就用0填充
3 的二进制:00000000 00000000 00000000 00000011
3 << 2: 00000000 00000000 00000000 00000000
无符号右移动: 以下结果 = 2,空出的位置0补全。
int i = 8 >>> 2;
无符号右移动:往右移动两位,全部用0补全
8的二进制:00000000 00000000 00000000 00001000
8 >>> 2 :00000000 00000000 00000000 00000010
总结下左移动、右移动、无符号右移动:
三种操作符均是往左移动、或者右移动,左移动和无符号右移动是不需要考虑符号位的,而右移动补全用需要考虑符号位~~~
面试官:嗯不错,那接下来进行下一个知识点吧。
小编:好的。
未完待续 ~~~~~~~~~

本文主要重点是Java运算符中:位运算。
在实际编码中,我们使用位运算可能会很少,甚至不用。 但是我们在浏览各种源码的时候,总会碰到各式各样的位运算符的操作,掌握位运算的前提需要了解进制一些相关的知识点,才能更好的理解位位运算的操作。
,作者:IT贱男
原文链接:https://jiannan.blog.csdn.net/article/details/106566953