Re: [VB6 ] 關於VB6位元左移問題

看板Visual_Basic作者 (喲)時間14年前 (2012/02/05 12:05), 編輯推噓2(204)
留言6則, 3人參與, 最新討論串2/4 (看更多)
※ 引述《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
真奇怪,為什麼大家都懂原po的問題,他有沒寫問題
02/05 20:55, 1F

02/05 20:56, , 2F
可以請教一下,為什麼大家都知道完整問題是什麼?
02/05 20:56, 2F

02/05 21:21, , 3F
你是不是沒有使用C寫過要用到<<的程式?
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
謝謝chinoyan大大的教學,小弟受益良多
02/07 00:15, 6F
文章代碼(AID): #1FBW0Mpm (Visual_Basic)
討論串 (同標題文章)
文章代碼(AID): #1FBW0Mpm (Visual_Basic)