Java 位运算符的基本用法【1】

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

注意:根据补码求原码:减一取反,取反时最高位是不变的,但是使用~按位取反时所有位都取反。

如果你对原反补码不是特别理解:参考文章

猜你喜欢

转载自blog.csdn.net/weixin_44296929/article/details/106938524