Java[探索](三)移位操作符
阿新 • • 發佈:2019-02-20
一 簡介
先來回答幾個問題:
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,用字串形式輸出二進位制數。