VB.Net - 移位運(yùn)算符

2022-06-02 11:58 更新
   按位與運(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


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)