打印本文 打印本文 关闭窗口 关闭窗口
More Faster , More VB User
作者:武汉SEO闵涛  文章来源:敏韬网  点击数2268  更新时间:2009/4/23 15:41:40  文章录入:mintao  责任编辑:mintao
 

''''将某位设置为1并返回值

Public Function BitSet32(Number As Long, Bit As Long) As Long

   BitSet32 = BitPower(Bit) Or Number

End Function

 

 

''''无符号扩展,最好作为内嵌到函数内部,减少调用开支。 注意,它与Clng有本质的区别

Public Function WORD2DWORD(Num As Integer) As Long

   WORD2DWORD = Num And &HFFFF&

End Function

 

 

''''逻辑右移32位函数

Public Function SHR32(ByRef Num As Long, BitNum As Long) As Long

    SHR32 = CallWindowProc(ByVal SHR32Addr, Num, BitNum, 0, 0)

End Function

 

''''逻辑左移32位函数

Public Function SHL32(ByRef Num As Long, BitNum As Long) As Long

    SHL32 = CallWindowProc(ByVal SHL32Addr, Num, BitNum, 0, 0)

End Function

 

''''没有采用汇编码,如果需要也可以采用,但16位的汇编码较32位的差很多,此函数速度约比SHR32慢一倍左右还可以

Public Function SHR16(ByRef Num As Integer, BitNum As Long) As Integer

    Dim mdw As BIT_DWORD

    Dim rl As Long

    mdw.LoWord = Num

    CopyMemory rl, mdw, 4

    rl = CallWindowProc(ByVal SHR32Addr, rl, BitNum, 0, 0)

    CopyMemory SHR16, rl, 2

End Function

 

Public Function SHL16(ByRef Num As Integer, BitNum As Long) As Integer

    Dim mdw As BIT_DWORD

    Dim rl As Long

    mdw.LoWord = Num

    CopyMemory rl, mdw, 4

    rl = CallWindowProc(ByVal SHL32Addr, rl, BitNum, 0, 0)

    CopyMemory SHL16, rl, 2

End Function

''''///////////////////////////////////////////////////////////////////////////////////////////

'''' 如果对性能没有太大要求,或没能理解上面的函数的作法,可以用以下几个函数。

'''' 一般不建议使用

 

Public Function HiByte(ByRef Num As Integer) As Byte

    Dim mw As BIT_WORD

   

    CopyMemory mw, Num, 2

    HiByte = mw.HiByte

End Function

 

Public Function LoByte(ByRef Num As Integer) As Byte

    CopyMemory LoByte, Num, 1  ''''可以省掉一次取值,

End Function

 

Public Function HiWord(ByRef Num As Long) As Integer

    Dim mdw As BIT_DWORD

   

    CopyMemory mdw, Num, 4

    HiWord = mdw.HiWord

End Function

 

Public Function LoWord(ByRef Num As Long) As Integer

   

    CopyMemory LoWord, Num, 2

   

End Function

 

''''比LoWord更快一点的版本(但如果内置于一个大函数内,可能用loword更好,因为代码更清晰)

Public Function LoWordFaster(ByRef Num As Long) As Integer

    If (Num And &H8000&) Then   '''' dw And &H00008000  来进行确定低位是不是负数

         LoWordFaster = Num Or &HFFFF0000

    Else

         LoWordFaster = Num And &HFFFF& ''''dw And &H0000FFFF

    End If

End Function

 

 

上一页  [1] [2] [3] 

打印本文 打印本文 关闭窗口 关闭窗口