Re: [VB6 ] 關於VB6位元左移問題
'左移
'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
推
02/05 14:14, , 1F
02/05 14:14, 1F
→
02/05 14:15, , 2F
02/05 14:15, 2F
→
02/05 20:58, , 3F
02/05 20:58, 3F
推
02/05 23:06, , 4F
02/05 23:06, 4F
→
02/06 00:19, , 5F
02/06 00:19, 5F
討論串 (同標題文章)