作者Yaiba (绯心刀刃)
看板Visual_Basic
标题Re: [VB6 ] 关於VB6位元左移问题
时间Tue Feb 14 12:16:53 2012
VB 2005 已经支援左移了
http://msdn.microsoft.com/zh-tw/library/b6ex274z(v=vs.80).aspx
Dim lResult, rResult As Integer
Dim pattern As Integer = 12
' The low-order bits of pattern are 0000 1100.
lResult = pattern << 3
' A left shift of 3 bits produces a value of 96.
rResult = pattern >> 2
' A right shift of 2 bits produces value of 3.
虽然是我的话也是用VB6写...VB6不死!!!!
※ 引述《fumizuki (蒙面加菲狮)》之铭言:
: '左移
: '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 (哟)》之铭言:
: : ^ 应该是乘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
--
常发人好人名片
Yaiba:您好,我是好人
帮正妹组电脑送到府
外加一年到府维护
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 42.74.1.2
1F:→ MOONRAKER:用清朝的剑杀明朝古人? 02/14 14:54
2F:→ MOONRAKER:VB6死好,还用VB6,小心当土海盗 02/14 14:55
3F:→ Yaiba:对VB6是一种情感...虽然很多问题..但忘了那些的话还是很好用 02/14 15:09
4F:→ Yaiba:因为VB後面改版有加入一些元素~ C要改版成VB2005说不定容易? 02/14 15:10
5F:→ MOONRAKER:VB.NET的确跟C干了很多东东 其实不见得是好事 02/14 19:21
6F:→ MOONRAKER:但是VB6不免费阿,就算教学版也应该都已经超过授权范围 02/14 19:22
7F:→ MOONRAKER:转到.NET前都觉得很难,可真的转了好像也没有那麽难 02/14 19:23
8F:→ yauhh:who cares? 你一个专案用VB6写,会思考2005有什麽指令吗? 02/14 20:22
9F:→ yauhh:而且一个专案选择VB6来做,不会是因为对它有感情这麽简单. 02/14 20:22