1. 程式人生 > >Java[探索](三)移位操作符

Java[探索](三)移位操作符

一 簡介

先來回答幾個問題:

1.移位操作符是什麼?

2.移位操作符有哪些組成,各有什麼特點?

第一個問題,移位操作符的的運算物件是二進位制的“位”,它只可用於處理整數型別。

第二個問題,它由左移位操作符(<<)、右移位操作符(>>)、"無符號"右移位操作符(>>>)

左移位操作符(<<):如操作符右側的數量是2,則將左邊的運算元向左移動2位(低位補0)

“有符號”右移位操作符(>>):如操作符右側的數量是2,則將左邊的運算元向右移動2位(符號為正高位插入0,否則高位插入1)

“無符號”右移位操作符(>>>):如操作符右側的數量是2,則將左邊的運算元向右移動2位(無論符號正負高位都插入0)

二 下面來一個Demo

package thired;

public class DemoOne {

	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int num1=5,num2=2,num3=-5;
		
		//左移位操作符
		System.out.println("左移位操作符:"+(num1<<num2));
		//“有符號”右移位操作符
		System.out.println("右移位操作符(正):"+(num1>>num2));
		System.out.println("右移位操作符(負):"+(num3>>num2));
		//“無符號”右移位操作符
		System.out.println("“無符號”右移位操作符(正):"+(num1>>>num2));
		System.out.println("“無符號”右移位操作符(負):"+(num3>>>num1));
		
		
	}

}

執行結果

左移位操作符:20
右移位操作符(正):1
右移位操作符(負):-2
“無符號”右移位操作符(正):1
“無符號”右移位操作符(負):134217727


三 注意

1.對char、byte、short進行移位操作時會將char、byte、short轉換為int,得到的結果也是int

2.對long進行移位操作時位是會轉換成long,得到的結果也是long

1.移位可與等號(<<= 、>>=、>>>=)組合使用,如果對byte和short進行移位操作可能會不正確,因為byte和short會先轉換成int.看看程式碼

package thired;

public class DemoOne {

	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int num1=5,num2=2,num3=-5;
		
		//左移位操作符
		System.out.println("左移位操作符:"+(num1<<num2));
		//“有符號”右移位操作符
		System.out.println("右移位操作符(正):"+(num1>>num2));
		System.out.println("右移位操作符(負):"+(num3>>num2));
		//“無符號”右移位操作符
		System.out.println("“無符號”右移位操作符(正):"+(num1>>>num2));
		System.out.println("“無符號”右移位操作符(負):"+(num3>>>num1));
		
		
		//byte運算不正確
		byte b=-1;
		System.out.println("byte運算1:"+(b>>>=2));
		System.out.println("byte運算2:"+(b>>>2));

	}

}

執行結果:
左移位操作符:20
右移位操作符(正):1
右移位操作符(負):-2
“無符號”右移位操作符(正):1
“無符號”右移位操作符(負):134217727
byte運算1:-1
byte運算2:1073741823


再來看兩個方法 Integer.toBinaryString,用字串形式輸出二進位制數。