# Bitwise Operarors ###### tags: `javascript` javaScript中的Bitwise判斷方式,是將每個運算數視為32 bits的數字,並且對每個bit進行運算。 ### AND * a & b - 兩個運算數(bit)的對應位置都是1的話,返回1 ```javascript! let a = 10; ler b = 9; console.log(a & b) // 8 ``` a 二進位:1010,b 二進位表示: 1001 ![](https://i.imgur.com/X5hNSMu.png) 二進位的 1000 為十進位的 8。 ### OR * a | b - 兩個運算數都是 0 的位置返回一個 0 ,只要有 1 就返回 1。 ```javascript! let a = 10; ler b = 9; console.log(a | b) // 11 ``` ![](https://i.imgur.com/N1b6bZx.png) 二進位的 1011 為十進位的 11。 ### XOR * a ^ b - 兩個運算數的對應位相同的每個位置返回0,只要是相同就返回 0 不同返回 1 。 ```javascript! let a = 10; ler b = 9; console.log(a ^ b) // 3 ``` ![](https://i.imgur.com/1otVFil.png) 二進位的 0011 為十進位的 3。 ### 反轉 * ~a - 反轉運算數的每個bit。 ```javascript! let a = 10; console.log(~a) // 5 ``` ![](https://i.imgur.com/TouPTcv.png) ### 往左 * a << b - 將二進制表示中的 a 向左移動 b 位,丟棄被移出的bits。 ```javascript! let a = 10; let b = 1; console.log(a<<b) // 20 ``` ![](https://i.imgur.com/mkvlNA2.png) 1010向左移 1 格,多出來的位置補 0 ,所以為 10100。 10100 為 20。 ### 往右 * a >> b - 將二進制表示中的 a 向右移動 b 位,丟棄被移出的bits。 ```javascript! let a = 10; let b = 1; console.log(a>>b) // 5 ``` ![](https://i.imgur.com/2XrtN3o.png) 原本的1010向右移後,最右邊的0被移除了,所以是101,101為 5 。 > 那麼...這些哪裡會用到呢? 1. 編碼計算 2. 資料傳出,sockets programming, ports 3. 資料的加密,SHA函數 4. 作業系統、CPU 5. Finite Sate Machine 6. 影像處理、人工智慧...等Graphics