看板 Visual_Basic 關於我們 聯絡資訊
'左移 'Length 位元數量,預設給8bits(1bytes) Public Function ShiftL(ByVal Num As Long, _ Optional Length As Integer = 8) As Long Dim Max As Long Max = 2 ^ (Length - 1) '最高位元的10進位值 If Num >= Max Then '先減去最高位元 Num = Num - Max End If ShiftL = Num * 2 End Function '右移 Public Function ShiftR(ByVal Num As Long) As Long ShiftR = Fix(Num / 2) '除以2,取整數即可 End Function ※ 引述《yauhh (喲)》之銘言: : ※ 引述《sanlinchang (<---剩男)》之銘言: : : arry[i]/2 |= arry[i]-48 << 4 : : arry(i)\2 = (arry(i) or ((arry(i)-48)+16)) : ^ 應該是乘16 : VB6有錯誤處理機制,可以on error goto 指定的程式段落. : 左移運算可以這樣子做: : environ.bas : --------------------------- : Option Explicit : Public Function ShiftL(Num As Long) As Long : On Error GoTo handle_overflow : ShiftL = Num * 2 '絕大部分只要一個乘二即可,如果嫌乘法慢,可以寫Num+Num. : Exit Function : handle_overflow: : HandleOverflow Num : End Function : 'HandleOverflow Num 時,知道Num一定是二進位值為1xxxxxxxxx...x, : '這時候要看你要實作算術左移或是普通左移,或者是循環左移. : '以下做普通左移: : Private Function HandleOverflow(Num as Long) As Long : Dim bit_len As Integer : Dim temp As Long : Dim mask as Long : temp = Num : bit_len = 0 : While temp <> 1 : temp = temp \ 2 : bit_len = bit_len + 1 : Wend : '我需要&H7FFFF...F將Num含第二位元之後的值取出. : mask = CLng("&H7" & String((bit_len-3)/4, "F")) : HandleOverflow = (Num And mask) * 2 : End Function -- ▃▅▇▆▄ ▆▂▃ ` 逝去感如何能留住,半點遺留殊不易,██▅▇▄▃ ▇▃▂" . █████████▃i ▁▄▇ 更多悽悽慘慘的遭遇………██▆▃ █▅▆▃ˍ▄* ▂█▄▇▅▂. 我不知道,王~八~蛋~~! ▂▆███ █▄▃ 。fumizuki。Check。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.176.149.188
yauhh:是正確,但就是不要這樣做,每次左移都做那麼多動作. 02/05 14:14
yauhh:等最後溢位才來處理溢位,才比較省工 02/05 14:15
chinoyan:請問移BYTE的目地是什麼呢? 02/05 20:58
Marty:移位元很多地方用的到 例如:解BCD Code.... 02/05 23:06
MOONRAKER:跟游泳跑步的目的是一樣的。 02/06 00:19