1. 程式人生 > 實用技巧 >C# 位運算子

C# 位運算子

位運算子包括:

| 按位或 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