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

1、上一篇文章记录了部分位运算符的基本用法1,下面继续总结>>>>><<的用法:

  • <<左移,左边最高位丢弃,右边补齐0
  • >>右移,最高位是0左边补齐0,最高位是1左边补齐1
  • >>>无符号右移,无论最高位是0还是1,左边补齐0

2、<<案例:

public static void main(String[] args){
	System.out.println( 12 << 1 );	//24
	System.out.println( 12 << 2 );	//48
}

总结:左移,向左移动几位就是乘以2的几次幂。

分析:首先获取12的二进制:00000000 00000000 00000000 00001100(正数补码和原码相同)

操作:将12的补码向左移动一位或两位:()内的是移除去的

			00000000 00000000 00000000 00001100		//12的补码
------------------------------------------------
<<1	 	 (0)00000000 00000000 00000000 00011000		//24的补码
------------------------------------------------
<<2	  (0)(0)00000000 00000000 00000000 00110000		//48的补码

3、>>案例:

public static void main(String[] args){
	System.out.println( 12 >> 1 );	//6
	System.out.println( 12 >> 2 );	//3
}

总结:右移,向右移动几位就是除以2的几次幂。

操作:将12的补码向右移动一位或两位:()内的是移除去的

	00000000 00000000 00000000 00001100			//12的补码
----------------------------------------------
<<1	00000000 00000000 00000000 00000110 (0)		//6的补码
----------------------------------------------
<<2	00000000 00000000 00000000 00000011 (0)(0)	//3的补码

4、>>>>>的区别:

有符号右移>>,如果高位是1则左边会一直补1,最终会都变为1,而无符号右移>>>无论最高位是0还是1,左边一直补0,最后会补到全为0。

5、有效率的算出2 * 8的结果:

扫描二维码关注公众号,回复: 11415055 查看本文章

如果直接写2*8,计算机底层是先将2转为二进制,然后将8转为二进制,然后再将他们相乘,其实这样的运算效率是很低的。

解决方法:

System.out.println( 2 << 3);

解释:因为82的三次方,向左移动三位也就是*2的三次方,计算机底层会先将2转换为二进制,然后向左移动三位,直接操作的是二进制,一定比2*8效率高。

猜你喜欢

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