java中位運算^,&,<<,>>,<<<,>>>,~,^總結


java中位運算^,&,<<,>>,<<<,>>>,~,^總結


1.&(與運算) 針對二進制,只要有一個為0,就為0


public static void main(String[] args) {
System.out.println("2&3運算的結果是 :"+(2&3));
//打印的結果是: 2&3運算的結果是 :2
}

2.|(或運算) 針對二進制,有一個為1,則為1


public static void main(String[] args) {
System.out.println("2|3運算的結果是 :"+(2|3));
//打印的結果是: 2|3運算的結果是 :3
}

3.^(亦或運算) ,針對二進制,相同的為0,不同的為1


public static void main(String[] args) {
System.out.println("2^3運算的結果是 :"+(2^3));
//打印的結果是: 2^3運算的結果是 :1
}
2 =======>0010
3 =======>0011
2^3就為0001,結果就是1

4.<

public static void main(String[] args) {
System.out.println("2<<3運算的結果是 :"+(2<<3));
//打印的結果是: 2<<3運算的結果是 :16
}

5.>>(向右位移) 針對二進制,轉換成二進制後向右移動3位,

public static void main(String[] args) {
System.out.println("2>>3運算的結果是 :"+(2>>3));
//打印的結果是: 2>>3運算的結果是 :0
}

6.>>>(無符號右移) 無符號右移,忽略符號位,空位都以0補齊

10進制轉二進制的時候,因為二進制數一般分8位、 16位、32位以及64位 表示一個十進制數,所以在轉換過程中,最高位會補零。
在計算機中負數採用二進制的補碼錶示,10進制轉為二進制得到的是源碼,將源碼按位取反得到的是反碼,反碼加1得到補碼
二進制的最高位是符號位,0表示正,1表示負。

與>>唯一的不同是它無論原來的最左邊是什麼數,統統都用0填充。 ——比如,byte是8位的,-1表示為byte型是11111111(補碼錶示法) b>>>4就是無符號右移4位,即00001111,這樣結果就是15。

7.~表示按位取反,即在數值的二進制表示方式上,

//~5 
//00000101 原碼
//11111010 取反,發現最高位是1,負數在計算機中需要去掉符號位:補碼取反存儲。
//11111001 補碼-1
//10000110 符號位不變按位取反 結果:6

//~-5
//10000101 原碼 最高位是1,補碼取反還原真實數據。
//10000100 補碼-1,
//01111011 取反
//00000100 按位取反,符號位不變 結果:4

8.!邏輯取反,即把所有非0的數值(相當於1)變為0,0變為1 下面看代碼

public static void main(String[] args) {
System.out.println("16>>2運算的結果是 :"+((16)>>2));
//打印的結果是: 16>>2運算的結果是 :4
}
public static void main(String[] args) {
System.out.println("-16>>2運算的結果是 :"+((-16)>>2));
//打印的結果是: -16>>2運算的結果是 :-4
}
public static void main(String[] args) {
System.out.println("16>>>2運算的結果是 :"+((16)>>>2));
//打印的結果是: 16>>>2運算的結果是 :4
}
public static void main(String[] args) {
System.out.println("-16>>>2運算的結果是 :"+((-16)>>>2));

//打印的結果是: -16>>>2運算的結果是 :1073741820
}
可見正數做>>>運算的時候和>>是一樣的。區別在於負數運算


分享到:


相關文章: