---
# System prepended metadata

title: Bitwise Operarors
tags: [javascript]

---

# 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