按位與運(yùn)算(a&b) | 按位或運(yùn)算(a|b) | 按位異或(a^b) | |
---|---|---|---|
a(60)的二進(jìn)制表示 | 0011 1100 | 0011 1100 | 0011 1100 |
b(13)的二進(jìn)制表示 | 0000 1101 | 0000 1101 | 0000 1101 |
運(yùn)算結(jié)果 | 0000 1100 | 0011 1101 | 0011 0001 |
結(jié)果的十進(jìn)制表示 | 12 | 61 | 49 |
按位取反(~a) | 左移(a<<2) | 右移(a>>2) | |
---|---|---|---|
a(60)的二進(jìn)制表示 | 0011 1100 | 0011 1100 | 0011 1100 |
運(yùn)算結(jié)果 | 1100 0011 | 1111 0000 | 0000 1111 |
運(yùn)算結(jié)果的十進(jìn)制表示 | -61 | 240 | 15 |
注:關(guān)于原碼,補(bǔ)碼和反碼:原碼:假設(shè)機(jī)器字長(zhǎng)為n,原碼就是用一個(gè)n位的二進(jìn)制數(shù),其中最高位為符號(hào)位:正數(shù)是0,負(fù)數(shù)是1。剩下的表示概數(shù)的絕對(duì)值,位數(shù)如果不夠就用0補(bǔ)全。反碼:在原碼的基礎(chǔ)上,符號(hào)位不變其他位取反,也就是就是0變1,1變0。補(bǔ)碼:在反碼的基礎(chǔ)上加1。 PS:正數(shù)的原、反、補(bǔ)碼都一樣,0的原碼跟反碼都有兩個(gè),因?yàn)檫@里0被分為+0和-0。按位取反和反碼有一定的相似之處但又不盡相同(反碼符號(hào)位不取反)。在計(jì)算機(jī)中,是以補(bǔ)碼的形式存放數(shù)據(jù)的。1100 0011剛好對(duì)應(yīng)-61。-61的原碼-> 1011 1101->反碼->1100 0010->補(bǔ)碼->1100 0011
運(yùn)算符 | 描述 | 實(shí)例 |
---|---|---|
And
|
按位與運(yùn)算符:參與運(yùn)算的兩個(gè)值,如果兩個(gè)相應(yīng)位都為 1,則該位的結(jié)果為 1,否則為 0 | (a & b) 輸出結(jié)果 12 ,二進(jìn)制解釋: 0000 1100 |
Or
|
按位或運(yùn)算符:只要對(duì)應(yīng)的二個(gè)二進(jìn)位有一個(gè)為 1 時(shí),結(jié)果位就為 1。 | (a | b) 輸出結(jié)果 61 ,二進(jìn)制解釋: 0011 1101 |
Xor
|
按位異或運(yùn)算符:當(dāng)兩對(duì)應(yīng)的二進(jìn)位相異(不同)時(shí),結(jié)果為 1 | (a ^ b) 輸出結(jié)果 49 ,二進(jìn)制解釋: 0011 0001 |
Not | 按位取反運(yùn)算符:對(duì)數(shù)據(jù)的每個(gè)二進(jìn)制位取反,即把 1 變?yōu)?0,把 0 變?yōu)?1 | (~a ) 輸出結(jié)果 -61 ,二進(jìn)制解釋: 1100 0011 |
<< | 左移動(dòng)運(yùn)算符:運(yùn)算數(shù)的各二進(jìn)位全部左移若干位,由"<<"右邊的數(shù)指定移動(dòng)的位數(shù),高位丟棄,低位補(bǔ) 0。 | a << 2 輸出結(jié)果 240 ,二進(jìn)制解釋: 1111 0000 |
>> | 右移動(dòng)運(yùn)算符:把">>"左邊的運(yùn)算數(shù)的各二進(jìn)位全部右移若干位,">>"右邊的數(shù)指定移動(dòng)的位數(shù) | a >> 2 輸出結(jié)果 15 ,二進(jìn)制解釋: 0000 1111 |
嘗試以下示例來(lái)了解VB.Net中提供的所有位運(yùn)算符:
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
當(dāng)上述代碼被編譯和執(zhí)行時(shí),它產(chǎn)生以下結(jié)果:
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
更多建議: