作者yauhh (喲)
看板Visual_Basic
標題Re: [VB6 ] 關於VB6位元左移問題
時間Sun Feb 5 12:05:39 2012
※ 引述《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
推 chinoyan:真奇怪,為什麼大家都懂原po的問題,他有沒寫問題 02/05 20:55
→ chinoyan:可以請教一下,為什麼大家都知道完整問題是什麼? 02/05 20:56
→ yauhh:你是不是沒有使用C寫過要用到<<的程式? 02/05 21:21
→ yauhh:位元左移運算這個東西,在資訊工程領域是常識,所以一講就知道 02/05 21:24
推 chinoyan:沒有 >"< 02/05 22:02
→ sanlinchang:謝謝chinoyan大大的教學,小弟受益良多 02/07 00:15