一、概念
在C#中,位運算是對整數的二進制表示進行操作的運算。這些運算包括按位與(AND)、按位或(OR)、按位異或(XOR)、按位取反(NOT)、左移(Left Shift)和右移(Right Shift)等。
下面是一些位運算的示例和說明:
符號 | 描述 | 運算規則 |
---|---|---|
& | 與 | 兩個位都為1時,結果才為1 |
| | 或 | 兩個位都為0時,結果才為0 |
^ | 異或 | 兩個位相同為0,相異為1 |
~ | 取反 | 0變1,1變0 |
<< | 左移 | 各二進位全部左移若干位,高位丟棄,低位補0 |
>> | 右移 | 各二進位全部右移若干位,對無符號數,高位補0,有符號數,各編譯器處理方法不一樣,有的補符號位(算術右移),有的補0(邏輯右移) |
1. 按位與(AND)
& 兩個位都為1時,結果才為1。
uint a = 60; // 二進制: 0011 1100
uint b = 13; // 二進制: 0000 1101
uint c = a & b; // 結果: 12, 二進制: 0000 1100
2. 按位或(OR)
| 兩個位都為0時,結果才為0。
uint a = 60; // 二進制: 0011 1100
uint b = 13; // 二進制: 0000 1101
uint c = a | b; // 結果: 61, 二進制: 0011 1101
3. 按位異或(XOR)
^ 相同為0,相異為1。
uint a = 60; // 二進制: 0011 1100
uint b = 13; // 二進制: 0000 1101
uint c = a ^ b; // 結果: 49, 二進制: 0011 0001
4. 按位取反(NOT)
~ 0變1,1變0。
uint a = 60; // 二進制: 0011 1100
uint b = ~a; // 結果的二進制依賴于具體的位數和類型,對于uint通常是取反后加1(因為uint是無符號的)
5. 左移(Left Shift)
<< 各二進位全部左移若干位,高位(左側)丟棄,低位(右側)補0。
uint a = 60; // 二進制: 0011 1100
uint b = a << 2; // 結果: 240, 二進制: 1111 0000
6. 右移(Right Shift)
>> 各二進位全部右移若干位,對無符號數,高位補0,有符號數,各編譯器處理方法不一樣,有的補符號位(算術右移),有的補0(邏輯右移)。
uint a = 240; // 二進制: 1111 0000
uint b = a >> 2; // 結果: 60, 二進制: 0011 1100