位運算符包括:
| 按位或 OR,& 按位與 AND,^ 按位異或 XOR,~ 取反 NOT,<< 左移 Left Shift,>> 右移 Right Shift,等等。
1.異或運算(^)
二元 ^ 運算符是為整型和 bool 類型預定義的。對於整型,^ 將計算操作數的按位“異或”。對於 bool 操作數,^ 將計算操作數的邏輯“異或”;也就是說,當且僅當只有一個操作數為 true 時,結果才為 true。
數值運算舉例
按位異或的3個特點:
(1) 0^0=0,0^1=1 0異或任何數=任何數
(2) 1^0=1,1^1=0 1異或任何數-任何數取反
(3) 1^1=0,0^0=0 任何數異或自己=把自己置0
例如:10100001^00010001=10110000
2. & 運算符(與)
1 & 0 為0
0 & 0 為0
1 & 1 為1
3. | 運算符(或)
1 | 0 為1
0 | 0 為0
1 | 1 為1
4. 左移 (<<)
將第一個操作數向左移動第二個操作數指定的位數,空出的位置補0。
左移相當於乘. 左移一位相當於乘2;左移兩位相當於乘4;左移三位相當於乘8。
x<<1= x*2
x<<2= x*4
x<<3= x*8
x<<4= x*16
同理, 右移即相反:
5. 右移 (>>)
將第一個操作數向右移動第二個操作數所指定的位數,空出的位置補0。
右移相當於整除. 右移一位相當於除以2;右移兩位相當於除以4;右移三位相當於除以8。
x>>1= x/2
x>>2= x/4
x>>3= x/8
x>>4=x/16
6. 復合賦值運算符
<<= |
左移且賦值運算符 |
C <<= 2 等同於 C = C << 2 |
>>= |
右移且賦值運算符 |
C >>= 2 等同於 C = C >> 2 |
&= |
按位與且賦值運算符 |
C &= 2 等同於 C = C & 2 |
^= |
按位異或且賦值運算符 |
C ^= 2 等同於 C = C ^ 2 |
|= |
按位或且賦值運算符 |
C |= 2 等同於 C = C | 2 |
例子1:使用^ 按位異或交換2個數
int x = 4; int y = 6; x ^= y; y ^= x; x ^= y; Console.WriteLine(x); //6 Console.WriteLine(y); //4
以上過程是這樣的:
(1)x ^= y,相當於x = x ^ y
x的二進制是:00100
y的二進制是:00110
x和y進行異或,結果是:00010
x轉換成十進制后,x為:2
(2)y ^= x,相當於y = y ^ x
y的二進制是:00110
x的二進制是:00010
y和x進行異或,結果是:00100
y轉換成十進制后,y為:4
(3)x ^= y,相當於x = x ^ y
x的二進制是:00010
y的二進制是:00100
x和y進行異或,結果是:00110
x轉換成十進制后,x為:6
實戰應用
如果某個字段的值都是二進制相加的如 1+2+4+8
那么
user.GroupValues ^= 128; 如果有128就去掉128
user.GroupValues |= 128; 如果沒有128就加上128