Re: [VB6 ] 關於VB6位元左移問題
※ 引述《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
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.231.70.95
推
02/05 20:55, , 1F
02/05 20:55, 1F
→
02/05 20:56, , 2F
02/05 20:56, 2F
→
02/05 21:21, , 3F
02/05 21:21, 3F
→
02/05 21:24, , 4F
02/05 21:24, 4F
推
02/05 22:02, , 5F
02/05 22:02, 5F
→
02/07 00:15, , 6F
02/07 00:15, 6F
討論串 (同標題文章)