1、位运算符有哪些:&
,|
,^
,~
,>>
,>>>
,<<
2、&
,|
,^
,~
的用法:
&
(与运算符):有0则0|
(或运算符):有1则1^
(位异或运算符):相同为0,不同为1~
(按位取反运算符):按位取反
根据逻辑运算符可知:&遇false则false,所以位运算符中0代表的就是false,1代表的就是true;
3、&
案例:
public static void main(String[] args){
System.out.println(6 & 3); //输出:2
}
首先我们拿到6和3的二进制:6的二进制:110
、3的二进制:011
110
& 011
----------
010
然后根据&
有0则0的规则,算出结果:2
4、|
案例:
public static void main(String[] args){
System.out.println(6 | 3); //输出:7
}
110
| 011
----------
010
根据|
有1则1的规则算出结果:7
5、^
案例:
public static void main(String[] args){
System.out.println(6 ^ 3); //输出:5
}
110
^ 011
----------
101
根据^
相同为0不同为1的规则算出结果:5
5、~
案例:
public static void main(String[] args){
System.out.println( ~6 );
}
首先找到6的原码并补全:00000000 00000000 00000000 00000110
计算要用到它的补码,但是正数的原反补都是本身。
接下来根据~
的规则,按位取反得到下面结果:(所有位都取反)
~ 00000000 00000000 00000000 00000110
-----------------------------------------
11111111 11111111 11111111 11111001
得到的是结果的补码:我们根据减一取反的规则,根据补码求原码。
11111111 11111111 11111111 11111001
-1 00000000 00000000 00000000 00000001
----------------------------------------
11111111 11111111 11111111 11111000
取反 10000000 00000000 00000000 00000111
最终得到结果:-7
注意:根据补码求原码:减一取反,取反时最高位是不变的,但是使用~
按位取反时所有位都取反。
如果你对原反补码不是特别理解:参考文章