基(ji)礎(chu)才是重中之重~位的運算
位運算無(wu)論(lun)在C#,VB還是在T-SQL里(li)都(dou)有對(dui)它(ta)支持(chi),位運算即對(dui)數(shu)值類型的每位進(jin)(jin)行計(ji)算,對(dui)于程(cheng)序里(li),你可以使(shi)用十進(jin)(jin)制(zhi)(zhi),十六進(jin)(jin)制(zhi)(zhi),二(er)進(jin)(jin)制(zhi)(zhi)對(dui)它(ta)進(jin)(jin)行位運算,事實(shi)上(shang)無(wu)論(lun)你使(shi)用哪種進(jin)(jin)制(zhi)(zhi),對(dui)于計(ji)算機來說最后(hou)都(dou)為把(ba)它(ta)轉換成二(er)進(jin)(jin)制(zhi)(zhi)(0,1)的形式,因為二(er)進(jin)(jin)制(zhi)(zhi)為簡單,呵(he)呵(he)。
下面是關于位運算的表(biao)格
|
運算符號
|
位運(yun)算操作符
|
運(yun)算(suan)對(dui)象類(lei)型
|
運算結果類型
|
對象操作數
|
實例(li)
|
|
~
|
非運算
|
整型(xing)
|
整型
|
1個
|
~x
|
|
&
|
與運算
|
2個
|
x & y
|
||
|
|
|
或運算
|
2個
|
x | y
|
||
|
^
|
異或運算
|
2個(ge)
|
x ^ y
|
||
|
<<
|
左移運算
|
2個
|
x << 2
|
||
|
>>
|
右移運算
|
2個
|
x >> 2
|
一般地(di),這種位(wei)運(yun)算(suan)中(zhong),我們的(de)(de)操作數(shu)多用(yong)于2的(de)(de)N次方的(de)(de)結(jie)果,如0,2,4,8,16,32,64,128...,為什么呢,因為這些數(shu)字(zi)在轉換成二進制后都很
特(te)別,看一下代碼,呵(he)呵(he)
1 1
2 10
4 100
8 1000
16 10000
32 100000
64 1000000
128 10000000
看到時了它,它們只是在最高位(wei)是為1,而其它位(wei)上都是0,這樣對于這些數(shu)字在進行位(wei)運(yun)算時,會有一(yi)些性質,我來總結(jie)一(yi)下:
對于滿足2的N次方的十進制數字有以下(xia)運算特(te)性:
1 與運算可以(yi)用來判斷某個數是位在(zai)另(ling)外一個數中存(cun)在(zai):
10 & 2 //結果為(wei)2,大于0表示操作數2在操作數1中存在 10=8+2
2 或(huo)運算可以用來將兩個數相加在(zai)一(yi)起(qi)
8 | 2 //結(jie)(jie)果為10,10 | 2 結(jie)(jie)果還(huan)是10,你可以把它轉換為二進(jin)制看一(yi)下,(1000 | 10 為1010,而1010 | 10 結(jie)(jie)果還(huan)是1010 ))呵呵,而10|4結(jie)(jie)果為14
3 非運算(suan)和與運算(suan)在一(yi)起使用,可(ke)以將一(yi)個元素從一(yi)個集合(he)里去除
4 & (~2) //結果為4,4里不包含2,所以(yi)直接返回原值4 3 & (~2) //結果(guo)為1,3由1和2組成,所(suo)以去掉2后原值(zhi)變為1
4 左(zuo)移(yi)運(yun)算(suan),每(mei)移(yi)1位相當于乘2
4 << 2 //結(jie)果為16
5 右移去處,每(mei)移1位相當于除2
4 >> 2 //結(jie)果為1
總結:
有(you)時候,我(wo)們(men)(men)在書本(ben)上看到的(de)及網絡上看到的(de)東(dong)西,不一定是正(zheng)確的(de),有(you)時,要求我(wo)們(men)(men)自己打(da)開電腦去驗(yan)證一下,呵呵!
有時候,編程的東西,很多(duo)時候當你把十(shi)進(jin)制變成二進(jin)制后(hou)會,就海闊天空了,呵呵!
感謝您的閱讀!