'VB是沒(méi)有移位命令的,但是可以自定義移位函數(shù)。
成都創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括謝家集網(wǎng)站建設(shè)、謝家集網(wǎng)站制作、謝家集網(wǎng)頁(yè)制作以及謝家集網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,謝家集網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶(hù)以成都為中心已經(jīng)輻射到謝家集省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶(hù)的支持與信任!
'位左移??
Public?Function?SHL(nSource?As?Long,?n?As?Byte)?As?Long??
SHL?=?nSource?*?2?^?n??
End?Function??
'位右移??
Public?Function?SHR(nSource?As?Long,?n?As?Byte)?As?Long??
SHR?=?nSource?/?2?^?n??
End?Function??
'獲得指定的位??
Public?Function?GetBits(nSource?As?Long,?n?As?Byte)?As?Boolean??
GetBits?=?nSource?And?2?^?n??
End?Function??
'設(shè)置指定的位??
Public?Function?SetBits(nSource?As?Long,?n?As?Byte)?As?Long??
SetBits?=?nSource?Or?2?^?n??
End?Function??
'清除指定的位??
Public?Function?ResetBits(nSource?As?Long,?n?As?Byte)?As?Long??
ResetBits?=?nSource?And?Not?2?^?n??
End?Function??
'注:以上的所有函數(shù),沒(méi)有考慮溢出的問(wèn)題,請(qǐng)自行添加相關(guān)處理。
對(duì)位模式執(zhí)行數(shù)學(xué)左移位。
result = pattern amount
各部分說(shuō)明
result
必選。整型數(shù)值。對(duì)該位模式進(jìn)行移位的結(jié)果。數(shù)據(jù)類(lèi)型與 pattern 的數(shù)據(jù)類(lèi)型相同。
pattern
必選。整型數(shù)值表達(dá)式。要進(jìn)行移位的位模式。數(shù)據(jù)類(lèi)型必須為整型(SByte、Byte、Short、UShort、Integer、UInteger、Long 或 ULong)。
amount
必選。數(shù)值表達(dá)式。要將該位模式移位的位數(shù)。數(shù)據(jù)類(lèi)型必須為 Integer 或擴(kuò)展到 Integer。
備注
數(shù)學(xué)移位不是循環(huán)的,即不會(huì)將在結(jié)果的一端移出的數(shù)位從另一端重新移入。在數(shù)學(xué)左移位運(yùn)算中,丟棄移出結(jié)果數(shù)據(jù)類(lèi)型范圍的數(shù)位,而將右端空出的數(shù)位位置設(shè)置為零。
為防止移位的結(jié)果超出它所支持的位數(shù),Visual Basic 使用與 pattern 的數(shù)據(jù)類(lèi)型相對(duì)應(yīng)的大小掩碼來(lái)屏蔽 amount 的值。可使用這些值的二進(jìn)制與運(yùn)算結(jié)果作為移位量。大小掩碼如下所示:
pattern數(shù)據(jù)類(lèi)型 掩碼(十進(jìn)制)掩碼(十六進(jìn)制)
SByte, Byte 7 H00000007
Short, UShort 15 H0000000F
Integer, UInteger 31 H0000001F
Long, ULong 63 H0000003F
如果 amount 為零,則 result 的值與 pattern 的值相同。如果 amount 為負(fù)值,則將把它作為無(wú)符號(hào)的值,并使用相應(yīng)的大小掩碼進(jìn)行屏蔽。
數(shù)學(xué)移位絕不會(huì)產(chǎn)生溢出異常。
注意只能對(duì)整型執(zhí)行按位運(yùn)算。浮點(diǎn)值必須轉(zhuǎn)換為整型后,才能執(zhí)行按位運(yùn)算。按位運(yùn)算采用二進(jìn)制(以 2 為基)形式計(jì)算兩個(gè)整數(shù)值。它們比較對(duì)應(yīng)位置上的位,然后基于比較的結(jié)果賦值。下面的示例演示了 And 運(yùn)算符。復(fù)制Dim x As Integerx = 3 And 5 前面的示例將 x 的值設(shè)置為 1。發(fā)生這種情況的原因如下:這些值以二進(jìn)制形式處理:二進(jìn)制格式的 3 為 011二進(jìn)制格式的 5 為 101And 運(yùn)算符比較這些二進(jìn)制表示方式,一次比較一個(gè)二進(jìn)制位置(位)。如果給定位置的兩個(gè)位都為 1,則將 1 放在結(jié)果中的該位置。如果任何一個(gè)位是 0,則將 0 放在結(jié)果中的該位置。在前面的示例中,按如下所示計(jì)算結(jié)果:011(二進(jìn)制格式的 3)101(二進(jìn)制格式的 5)001(二進(jìn)制格式的計(jì)算結(jié)果)計(jì)算結(jié)果以十進(jìn)制形式處理。值 001 是 1 的二進(jìn)制表示形式,因此 x = 1。除了在任何一個(gè)比較位是 1 或兩個(gè)比較位都是 1 的情況下將 1 賦予結(jié)果位以外,按位 Or 運(yùn)算與此類(lèi)似。Xor 在比較的位正好只有一個(gè)是 1(而不是兩者都是 1)時(shí)將 1 賦給結(jié)果位。Not 采用單個(gè)操作數(shù)并反轉(zhuǎn)所有位(包括符號(hào)位),然后將該值賦予結(jié)果。這意味著,對(duì)于有符號(hào)正數(shù),Not 始終返回負(fù)值,而對(duì)于負(fù)數(shù),Not 始終返回正值或零。AndAlso 和OrElse 運(yùn)算符不支持按位運(yùn)算。 追問(wèn): 好復(fù)雜啊...還是不會(huì),還有整數(shù)怎么轉(zhuǎn)換為二進(jìn)制數(shù)? 回答: 為什么一定要用位運(yùn)算呢,你那個(gè)乘法只能通過(guò)左移操作符“