對位模式執(zhí)行數(shù)學(xué)左移位。
創(chuàng)新互聯(lián)于2013年成立,先為江南等服務(wù)建站,江南等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為江南企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
result = pattern amount
各部分說明
result
必選。整型數(shù)值。對該位模式進(jìn)行移位的結(jié)果。數(shù)據(jù)類型與 pattern 的數(shù)據(jù)類型相同。
pattern
必選。整型數(shù)值表達(dá)式。要進(jìn)行移位的位模式。數(shù)據(jù)類型必須為整型(SByte、Byte、Short、UShort、Integer、UInteger、Long 或 ULong)。
amount
必選。數(shù)值表達(dá)式。要將該位模式移位的位數(shù)。數(shù)據(jù)類型必須為 Integer 或擴(kuò)展到 Integer。
備注
數(shù)學(xué)移位不是循環(huán)的,即不會將在結(jié)果的一端移出的數(shù)位從另一端重新移入。在數(shù)學(xué)左移位運(yùn)算中,丟棄移出結(jié)果數(shù)據(jù)類型范圍的數(shù)位,而將右端空出的數(shù)位位置設(shè)置為零。
為防止移位的結(jié)果超出它所支持的位數(shù),Visual Basic 使用與 pattern 的數(shù)據(jù)類型相對應(yīng)的大小掩碼來屏蔽 amount 的值??墒褂眠@些值的二進(jìn)制與運(yùn)算結(jié)果作為移位量。大小掩碼如下所示:
pattern數(shù)據(jù)類型 掩碼(十進(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ù)值,則將把它作為無符號的值,并使用相應(yīng)的大小掩碼進(jìn)行屏蔽。
數(shù)學(xué)移位絕不會產(chǎn)生溢出異常。
注意只能對整型執(zhí)行按位運(yùn)算。浮點(diǎn)值必須轉(zhuǎn)換為整型后,才能執(zhí)行按位運(yùn)算。按位運(yùn)算采用二進(jìn)制(以 2 為基)形式計(jì)算兩個整數(shù)值。它們比較對應(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)制表示方式,一次比較一個二進(jìn)制位置(位)。如果給定位置的兩個位都為 1,則將 1 放在結(jié)果中的該位置。如果任何一個位是 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。除了在任何一個比較位是 1 或兩個比較位都是 1 的情況下將 1 賦予結(jié)果位以外,按位 Or 運(yùn)算與此類似。Xor 在比較的位正好只有一個是 1(而不是兩者都是 1)時將 1 賦給結(jié)果位。Not 采用單個操作數(shù)并反轉(zhuǎn)所有位(包括符號位),然后將該值賦予結(jié)果。這意味著,對于有符號正數(shù),Not 始終返回負(fù)值,而對于負(fù)數(shù),Not 始終返回正值或零。AndAlso 和OrElse 運(yùn)算符不支持按位運(yùn)算。 追問: 好復(fù)雜啊...還是不會,還有整數(shù)怎么轉(zhuǎn)換為二進(jìn)制數(shù)? 回答: 為什么一定要用位運(yùn)算呢,你那個乘法只能通過左移操作符“ ”來進(jìn)行,而左移一次代表乘以2,要是乘以一個小數(shù),就必須先化成2的n次方,不夠再用加減法調(diào)整,很麻煩啊,沒必要用位運(yùn)算啊。。。 追問: 因?yàn)槲乙M(jìn)行大量的運(yùn)算,但速度要快,所有用位運(yùn)算...我也不想啊.. 回答: 那就不該用VB 啊,c/c++在執(zhí)行效率上是沒話說的。 追問: 問題就是不會嘛... 回答: 那你上csdn上發(fā)帖效果應(yīng)該不錯 追問: CSDN發(fā)了,我發(fā)在高性能運(yùn)算,沒人... 回答: 耐心一些,或者你應(yīng)該發(fā)到VB.NET論壇那里。。。 追問: 額..只能這樣了... 提問者 的感言: 太復(fù)雜了..算了 2010-11-08
Dim i As Integer
For i = 0 To Me.Width - Button1.Width 'me為容器,典型的是form1
Button1.Left += 1
Windows.Forms.Application.DoEvents()
Next
原理:不斷地變化button1的X軸,使其向右移,同樣,只要控制好其x,y軸,就可以變化button的變化
如果是做小游戲,建議弄成類吧,把其中的左(右)移或?qū)瞧渌苿优善浣涌冢员悴僮鳌?/p>
由于涉及內(nèi)容太多,不再詳述。原理都一樣
用bitarray類和BitVector32類實(shí)現(xiàn)
VB實(shí)現(xiàn)大致如下:
Imports?System.Collections.Specialized
...
Dim?bvData?as?BitVector32
Dim?sec1?As?BitVector32.Section?=?BitVector32.CreateSection(255)
Dim?sec2?As?BitVector32.Section?=?BitVector32.CreateSection(255,sec1)
Dim?sec3?As?BitVector32.Section?=?BitVector32.CreateSection(255,sec2)
Dim?sec4?As?BitVector32.Section?=?BitVector32.CreateSection(255,sec3)
Dim?Buf(4096)?as?Byte?'receive?byte?size?matched?with?DSP?send?data:?1024*4Byte
Dim?recCount?as?Integer
Dim?Data(1024)?as?long
....
For?recCount?=?0?To?1023
bvData(sec4)?=?buf(recByte*4)
bvData(sec3)?=?buf(recByte*4+1)
bvData(sec2)?=?buf(recByte*4+2)
bvData(sec1)?=?buf(recByte*4+3)
Data(recCount)?=?bvData.Data?'這樣數(shù)據(jù)肯定是-398
Next
....