在前面已經討論了位運算子,移位運算子對二進位制值執行移位元運算。在進入移位運算子之前,讓我們了解位元運算。
按位元運算子處理位並執行逐位元運算。 &
,|
和^
的真值表如下:
假設A = 60
;而B = 13
; 如果以二進位制格式表示,它們將如下所示:
A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
前面已經看到VB.Net支援的按位元運算子是:And
,Or
,Xor
和Not
。移位運算子分別是:>>
和<<
表示左移和右移。
假設變數A = 60
,變數B = 13
,那麼:
運算子 | 描述 | 說明 |
---|---|---|
And |
如果在兩個運算元中都存在,則按位元AND 運算子會複製結果。 |
(A AND B) 結果為:12 , 也就是:0000 1100 |
Or |
二進位制或運算子複製一個位,如果它存在於任一運算元。 | (A Or B) 結果為 61 , 也就是:0011 1101 |
Xor |
如果二進位制XOR 運算子被設定在一個運算元中,但它們不能同時被二進位制XOR 運算子複製。 |
(A Xor B) 結果為:49 ,也就是:0011 0001 |
Not |
二進位制二補數運算子是一元運算子,具有「翻轉」位的作用。 | (Not A ) 結果為:-61 ,也就是:1100 0011 |
<< |
二進位制左移運算子。左運算元值左移由右運算元指定的位數。 | A << 2 結果為:240 , 也就是:1111 0000 |
>> |
二進位制右移運算子。左運算元值右移由右運算元指定的位數。 | A >> 2 結果為:15 , 也就是:0000 1111 |
嘗試下面的例子來理解VB.Net中所有可用的按位元運算子,檔案:BitwiseOp.vb:
Module BitwiseOp
Sub Main()
Dim a As Integer = 60 ' 60 = 0011 1100
Dim b As Integer = 13 ' 13 = 0000 1101
Dim c As Integer = 0
c = a And b ' 12 = 0000 1100 '
Console.WriteLine("Line 1 - Value of c is {0}", c)
c = a Or b ' 61 = 0011 1101 '
Console.WriteLine("Line 2 - Value of c is {0}", c)
c = a Xor b ' 49 = 0011 0001 '
Console.WriteLine("Line 3 - Value of c is {0}", c)
c = Not a ' -61 = 1100 0011 '
Console.WriteLine("Line 4 - Value of c is {0}", c)
c = a << 2 ' 240 = 1111 0000 '
Console.WriteLine("Line 5 - Value of c is {0}", c)
c = a >> 2 ' 15 = 0000 1111 '
Console.WriteLine("Line 6 - Value of c is {0}", c)
Console.ReadLine()
End Sub
End Module
執行上面範例程式碼,得到以下結果 -
F:\worksp\vb.net\operators>vbc BitwiseOp.vb
F:\worksp\vb.net\operators>BitwiseOp.exe
Line 1 - Value of c is 12
Line 2 - Value of c is 61
Line 3 - Value of c is 49
Line 4 - Value of c is -61
Line 5 - Value of c is 240
Line 6 - Value of c is 15