java基礎-位操做符與位移操做符

位操做符是用來操做整數基本數據類型中的單個「比特(bit)」,即二進制位,按位操做符會對兩個參數中對應的位執行布爾代數運算,並最終生成一個結果。java

java對位的操做符都包含那些呢?spa

下來我來羅列一下java的位操做符:it

1. ‘&’ 按位 ‘與’原理

若是a和b值都爲1,則結果爲1,不然結果爲0。擴展

例如:數據類型

  int a = 1;
  int b = 0;
  System.out.println(a & b);  結果是0
二進制

  int a = 1;
  int b = 1;
  System.out.println(a & b);  結果是1
數據

2. ‘|’ 按位 ‘或’移動

若是a和b其中一個值爲1,則結果爲1,若是兩個都爲0,則結果爲0。生成

例如:

  int a = 1;
  int b = 0;
  System.out.println(a | b);  結果是1

  int a = 0;
  int b = 0;
  System.out.println(a | b);  結果是0

3.'^' 按位 ‘異或’

若是a、b兩個值不相同,則異或結果爲1。若是a、b兩個值相同,異或結果爲0。 

 例如:

  int a = 0;
  int b = 1;
  System.out.println(a ^ b);  結果爲1

  int a = 1;
  int b = 1;
  System.out.println(a ^ b);  結果爲0

4.‘~’非也稱爲按位取反操做符

這裏要提醒的一點是,這裏的取反是按照數據的補碼進行取反;

  int a = 0;
  System.out.println( ~a);  結果爲-1

  int a = 19;
  System.out.println(~a); 結果爲:20

  計算原理:

  求出19的二進制碼:10011

   19的補碼爲:00010011

   19的反碼爲:11101100

那麼根據計算公式,咱們能夠算出19的反碼的10進制數爲:-20   

(-1)*2^7 + 1*2^6 + 1*2^5  + 0*2^4 + 1*2^3 + 1*2^2 + 0*2^1  + 0*2^0

= -128 + 64 + 32 + 0 + 8 + 4 + 0 + 0

= -20

這裏還須要說明一點:「~」是一元操做符,不能與 」=「 聯合使用,而&、^、|是二元操做符,都可以與 「=」 聯合使用

5.‘<<’左位移運算符

左位移是按照操做符右側指定的位數講操做符左邊的數據向左移動(低位補0);

‘>>’有符號右移運算符

右位移是按照操做符右側指定的位數講操做符左邊的數據向右移動,有符號右位移運算使用符號擴展,若符號爲正,則高位插入0,若符號爲負,則高位插入1

‘>>>’無符號右移運算使用零擴展,不管正負,最高位都插入0。

那麼如何進行位移運算呢?

int佔4個字節的空間即32bit(32位)

那麼 19 的二進制數應該爲:

  0000 0000 0000 0000 0000 0000 0001 0011

19 << 3  19向左移動3位後的結果

  0000 0000 0000 0000 0000 0000 1001 1000

轉換爲10進制數爲:

1*2^7 + 1*2^4 + 1*2^3

= 128 + 16 + 8

= 152

19 >> 3 19向右移動3位後的結果是

0000 0000 0000 0000 0000 0000 0000 0010

轉換爲10進制結果爲:

1*2^1 = 2

19 >>> 3 無符號向右移動3位結果是 

0000 0000 0000 0000 0000 0000 0000 0010

轉換爲10進制結果爲:

1*2^1 = 2

在這裏須要注意的是,位移能夠與等號(=)進行聯合使用,若是對char、byte或者short類型進行位移運算時則須要先轉換爲int再進行位移運算,不然直接計算的結果多是不正確的。

相關文章
相關標籤/搜索