1. 程式人生 > >位運算基礎

位運算基礎

xl_echo編輯整理,交流學習請加1280023003
百戰不敗,依不自稱常勝,百敗不頹,依能奮力前行。——這才是真正的堪稱強大!!


位操作是程式設計中對位模式按位或二進位制數的一元和二元操作。位運算子用來對二進位制位進行操作,C語言中六種位運算子:

  • & 按位與
  • | 按位或
  • ^ 按位異或
  • ~取反
  • <<左移
  • >>右移

& 按位“與”操作符,如果兩個數的二進位制,相同位數都是1,則該位結果是1,否則是0.

5&4
5的二進位制是  0000 0000 0000 0101
4的二進位制是  0000 0000 0000 0100
則結果是     0000 0000 0000 0100 

|按位“或”

操作符,如果兩個數的二進位制,相同位數有一個是1,則該位結果是1,否則是0

5 | 4
5的二進位制是  0000 0000 0000 0101
4的二進位制是  0000 0000 0000 0100
則結果是     0000 0000 0000 0101

“異或” ^

按位“異或”操作符,如果兩個數的二進位制,相同位數只有一個是1,則該位結果是1,否則是0

5 ^ 4
5的二進位制是  0000 0000 0000 0101
4的二進位制是  0000 0000 0000 0100
則結果是     0000 0000 0000 0001

“非”、“位非”(~)也稱為取反操作符

按位“非”操作符,屬於一元操作符,只對一個運算元進行操作,(其他按位操作符是二元操作符)。按位“非”生成與輸入位相反的值,——若輸入0,則輸出1,若輸入1,則輸出0。

5的二進位制是  0000 0000 0000 0101
則~5是       1111 1111 1111 1010

左移運算 >>
將數字轉換成為2進位制,左移2位就在二進位制資料的右邊補2個0,左邊的摒棄。

例如:4<<3
4的二進位制碼是 0000 0100
實現以上的左移3位結果
              0010 0000
然後將二進位制轉換成為10進位制,結果是:32

使用java程式碼驗證

public static void main(String[] args) {
    System.out.println(4 << 3);
}

輸出結果:

右移運算 >>
將數字轉換成為2進位制,右移2位就在二進位制資料的左邊補2個0,右邊的摒棄。
注意:這裡要考慮負數,如果是負數,則是補1,右邊的丟棄

例如:16>>3
4的二進位制碼是 0001 0000
實現以上的右移3位結果
              0000 0010
然後將二進位制轉換成為10進位制,結果是:2

使用java程式碼驗證

public static void main(String[] args) {
    System.out.println(16 << 3);
}

輸出結果:

無符號右移 >>>
將數字轉換成為2進位制,不考慮符號。右移2位就在二進位制資料的左邊補2個0,右邊的摒棄。