位元運算是直接操作數字的二進位表示的一種方法,它能有效率地完成許多數學或邏輯運算。以下是一些常見的位元運算符及其作用:
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
變成0
,0
變成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. 位元右移 (>>
)
- 位元右移會將數字的位元向右移動,並依據正負號,在左邊補上
0
或1
。每移動一次,相當於數字除以 2。
範例:
int a = 6; // 二進位: 0110
int result = a >> 1; // 結果: 0011 (3)
這裡的結果是 3
,因為每次右移,數字變成原來的一半。
如何應用位元運算?
在程式碼中,位元運算可以用於:
- 控制權限的開關(如:按位操作設定某些特定的標誌)
- 操作位元遮罩(如範例中的
cullingMask
) - 快速實現數學運算(如位元移位來進行乘法或除法)
透過位元運算,我們能更有效率地進行許多低層次的數據處理。