Java的二元操作符

Java位运算

必读:二进制的转换

二进制 → 十进制
将二进制的(111)B转换为十进制的步骤如下:

1. 第0位 1 x 2^0 = 1;

2. 第1位 1 x 2^1 = 2;

3. 第2位 1 x 2^2 = 4;

4. 读数,把结果值相加,1+2+4=7,即(111)B=(7)D。

十进制 → 二进制

将十进制的(43)D转换为二进制的步骤如下:

1. 将商7除以2,商3余数为1;

2. 将商3除以2,商1余数为1;

3. 将商1除以2,商0余数为1;

4. 读数,因为最后一位是经过多次除以2才得到的,因此它是最高位,读数字从最后的余数向前读,111,即(7)D=(111)B。

必读:原码,反码,补码(负整数如何转成二制制)

int 值 -7为例子

1.按照绝对值大小转换成的二进制数,称为原码   -->[绝对值大小]
	0000 0000 0000 0111  -->原码
2.反码:将二进制数原位取反,所得的新二进制数  -->(1变0,0变1)
	1111 1111 1111 1000
3.补码:反码加1称为补码
	1111 1111 1111 1000 + 1 = 1111 1111 1111 1001
	补码为:1111 1111 1111 1001
	
重点:在计算机中,负值以其正值的补码形式表达.
	也就是说,-7的二进制数是:
	是,是,是:1111 1111 1111 1001
	正数的话,原码和反码,补码相同!!!!!!
	正数的话,原码和反码,补码相同!!!!!!
	正数的话,原码和反码,补码相同!!!!!!

左移(<<)

package com.when

public void Main{
	public static void main(String[] args){
		System.out.println(7<<2)
		//输出结果为:28
	}
}

执行逻辑

0000 0000 0000 0111 --> (7)D ,左移2位,空位补为0,转换位下面数字

0000 0000 0001 1100 --> (28)D

右移(>>)

package com.when

public void Main{
	public static void main(String[] args){
		System.out.println(7>>2)
		//输出结果为:28
	}
}

执行逻辑

0000 0000 0000 0111 --> (7)D ,右移2位,空位补为0,转换位下面数字

0000 0000 0000 0001 --> (1)D

无符号右移(>>>)

package com.when

public void Main{
	public static void main(String[] args){
		System.out.println(7>>3);	//输出结果为:0
		System.out.println(-7>>3);   //输出结果为:-1
		System.out.println(-7>>>3);  //输出结果为:536870911
	}
}

执行逻辑

0000 0000 0000 0111    -->  表示的是二进制的7
1111 1111 1111 1001    -->  表示的是二进制的-7

7右移3位,高位用0补位,结果为0,0的表示为:0000 0000 0000 0000

-7右移三位,高位用1补位,结果为-1,-1的表示为:1111 1111 1111 1111

注意:无符号位移,高位用0补位,结果为正数

-7无符号位移为0001 1111 1111 1111,结果为:536870911

位与( & )

package com.when

public void Main{
	public static void main(String[] args){
		System.out.println(7&3);//结果为:3
	}
}

理解:可以理解为串联的两个开关

开关1开,2关灯关

开关1关,2关灯关

开关1开,2开灯开

7转为二进制:  0000 0000 0000 0111
3转为二进制:  0000 0000 0000 0011
7&3的结果为: 0000  0000 0000 0011

位或( | )

package com.when

public void Main{
	public static void main(String[] args){
		System.out.println(7|3);//结果为:7
	}
}

理解:并联开关

7转为二进制:  0000 0000 0000 0111
3转为二进制:  0000 0000 0000 0011
7|3的结果为: 0000  0000 0000 0111

位异或( ^ )

package com.when

public void Main{
	public static void main(String[] args){
		System.out.println(7^3);//结果为:4
	}
}
7转为二进制:  0000 0000 0000 0111
3转为二进制:  0000 0000 0000 0011
7^3的结果为: 0000  0000 0000 0100
对应位置的值相反,则为1,否则为0

一个好玩的位异或的例子:

​ 有两个正整数 分别为 int x = 7; int y = 4;

​ 如何在不定义第三个变量的情况下,让int x = 4; int y=7;(可以自己想一下)

答案在下面:

==

==

==

====

====

====

====

====

====

====

==

package com.when

public void Main{
	public static void main(String[] args){
		int x = 7;
        int y = 4;
         x = x^y;
         y = x^y;
         x = x^y;
        System.out.println("x的值为:"+x);
        System.out.println("y的值为:"+y);
	}
}
发布了6 篇原创文章 · 获赞 0 · 访问量 834

猜你喜欢

转载自blog.csdn.net/csdn960616/article/details/92792153
今日推荐