Java 位運算

一、位移運算:java

①左移n位至關於乘以2的n次方。.net

②右移n位至關於除以2的n次方。這裏是取商哈,餘數就不要了。get

③ >>>(無符號右移)源碼

   運算規則:it

   按二進制形式把全部的數字向右移動對應位數,低位移出(捨棄),高位的空位補零。對於正數來講和帶符號右移相同,對於負數來講不一樣。 其餘結構和>>類似。io

// 一、左移( << )
		// 0000 0000 0000 0000 0000 0000 0000 0101 而後左移2位後,低位補0://
		// 0000 0000 0000 0000 0000 0000 0001 0100 換算成10進製爲20
		System.out.println(5 << 2);// 運行結果是20

// 二、右移( >> ) 高位補符號位
		// 0000 0000 0000 0000 0000 0000 0000 0101 而後右移2位,高位補0:
		// 0000 0000 0000 0000 0000 0000 0000 0001
		System.out.println(5 >> 2);// 運行結果是1

// 三、無符號右移( >>> ) 高位補0
		// 例如 -5換算成二進制後爲:0101 取反加1爲1011
		// 1111 1111 1111 1111 1111 1111 1111 1011
		// 咱們分別對5進行右移3位、 -5進行右移3位和無符號右移3位:
		System.out.println(5 >> 3);// 結果是0
		System.out.println(-5 >> 3);// 結果是-1
		System.out.println(-5 >>> 3);// 結果是536870911

SelectionKey.java:Android API 25源碼
public static final int OP_READ = 1 << 0;
public static final int OP_WRITE = 1 << 2;
public static final int OP_CONNECT = 1 << 3;
public static final int OP_ACCEPT = 1 << 4;數據類型

SelectionKey.java:JDK 1.8源碼
public static final int OP_READ = 1;
public static final int OP_WRITE = 4;
public static final int OP_CONNECT = 8;
public static final int OP_ACCEPT = 16;二進制

二進制--原碼、反碼、補碼數據

對於有符號的而言:static

一、二進制的最高位是符號位:0表示正數,1表示負數

二、正數的原碼、反碼、補碼都同樣

三、負數的反碼=它的原碼符號位不變,其它位取反

四、負數的補碼=它的反碼+1

五、0的反碼,補碼都是0

六、java沒有無符號數,換言之,java中的數都是有符號的

七、在計算機運算的時候,都是以補碼的方式來運算的。

 

n=37 ,二進制數就是 100101

由於在Java中,全部數據的表示方式都是以補碼形式來表示,若是沒有特別的說明,Java 中的數據類型默認爲int,int數據類型的長度爲8位,就是32字節,32bit的意思,所以,n=100101的原碼=補碼(由於是正數,因此原=補=反)運算過程就是:

原碼:00000000 00000000 00000000 00100101 =37

相關文章
相關標籤/搜索