java中位運算 異或(^)、與(&)、位移 總結

轉載:https://www.cnblogs.com/liaopeng/p/8436155.html

1、 ^ (亦或運算) ,針對二進制,相同的爲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
*/

2、 &(與運算) 針對二進制,只要有一個爲0,就爲0

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

3、<< (向左位移) 針對二進制,轉換成二進制後向左移動3位,後面用0補齊

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

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

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

5、 >>> (無符號右移) 無符號右移,忽略符號位,空位都以0補齊
10進制轉二進制的時候,因爲二進制數一般分8位、 16位、32位以及64位 表示一個十進制數,所以在轉換過程中,最高位會補零。

在計算機中負數採用二進制的補碼錶示,10進制轉爲二進制得到的是源碼,將源碼按位取反得到的是反碼,反碼加1得到補碼

二進制的最高位是符號位,0表示正,1表示負。

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

下面看代碼:

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
}

可見正數做>>>運算的時候和>>是一樣的。區別在於負數運算

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