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的結果:

如果直接寫2*8,計算機底層是先將2轉爲二進制,然後將8轉爲二進制,然後再將他們相乘,其實這樣的運算效率是很低的。

解決方法:

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

解釋:因爲82的三次方,向左移動三位也就是*2的三次方,計算機底層會先將2轉換爲二進制,然後向左移動三位,直接操作的是二進制,一定比2*8效率高。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章