作者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
1F:推 chinoyan:真奇怪,为什麽大家都懂原po的问题,他有没写问题 02/05 20:55
2F:→ chinoyan:可以请教一下,为什麽大家都知道完整问题是什麽? 02/05 20:56
3F:→ yauhh:你是不是没有使用C写过要用到<<的程式? 02/05 21:21
4F:→ yauhh:位元左移运算这个东西,在资讯工程领域是常识,所以一讲就知道 02/05 21:24
5F:推 chinoyan:没有 >"< 02/05 22:02
6F:→ sanlinchang:谢谢chinoyan大大的教学,小弟受益良多 02/07 00:15