位元運算

位元運算是直接操作數字的二進位表示的一種方法,它能有效率地完成許多數學或邏輯運算。以下是一些常見的位元運算符及其作用:

1. 位元 AND (&)

  • 位元 AND 將兩個數字的每一個位元進行 AND 運算,只有當兩個位元都是 1 時,結果才是 1,否則結果是 0

範例:

int a = 6;  // 二進位: 0110
int b = 3;  // 二進位: 0011
int result = a & b;  // 結果: 0010 (2)

這裡的結果是 2,因為只有倒數第二位同時為 1

2. 位元 OR (|)

  • 位元 OR 將兩個數字的每一個位元進行 OR 運算,只要其中一個位元是 1,結果就會是 1

範例:

int a = 6;  // 二進位: 0110
int b = 3;  // 二進位: 0011
int result = a | b;  // 結果: 0111 (7)

這裡的結果是 7,因為每個對應位元至少有一個是 1

3. 位元 NOT (~)

  • 位元 NOT 是單一運算元操作,它將數字的每一個位元反轉:1 變成 00 變成 1

範例:

int a = 6;  // 二進位: 0110
int b = 3;  // 二進位: 0011
int result = a | b;  // 結果: 0111 (7)

這裡的結果是 -7,因為在計算機中,位元的反轉會導致負數表示。

4. 位元 XOR (^)

  • 位元 XOR 將兩個數字的每一個位元進行異或運算,當兩個位元不同時,結果是 1;相同時結果是 0

範例:

int a = 6;  // 二進位: 0110
int b = 3;  // 二進位: 0011
int result = a ^ b;  // 結果: 0101 (5)

這裡的結果是 5,因為位元不同的地方是 1

5. 位元左移 (<<)

  • 位元左移會將數字的位元向左移動,並在右邊補上 0。每移動一次,相當於數字乘以 2。

範例:

int a = 3;  // 二進位: 0011
int result = a << 1;  // 結果: 0110 (6)

這裡的結果是 6,因為每次左移,數字變成原來的兩倍。

6. 位元右移 (>>)

  • 位元右移會將數字的位元向右移動,並依據正負號,在左邊補上 01。每移動一次,相當於數字除以 2。

範例:

int a = 6;  // 二進位: 0110
int result = a >> 1;  // 結果: 0011 (3)

這裡的結果是 3,因為每次右移,數字變成原來的一半。

如何應用位元運算?

在程式碼中,位元運算可以用於:

  • 控制權限的開關(如:按位操作設定某些特定的標誌)
  • 操作位元遮罩(如範例中的 cullingMask
  • 快速實現數學運算(如位元移位來進行乘法或除法)

透過位元運算,我們能更有效率地進行許多低層次的數據處理。

Tags: