Resumen Operaciones Binarias con VB

Si consideramos un word como un conjunto de 16 bits, podemos usar estas funciones:

Public Function HIWORD(L As Long) As Long
    HIWORD = (L And &HFF00&) \ &H100&
End Function


Public Function LOWORD(L As Long) As Long
    LOWORD = L And &HFF&
End Function

Para saber si un bit está puesto o no, utiliza la siguiente función, que devolverá True o False:

Function BitOn(Word As Long, Bit As Long) As Boolean
    If Word And 2 ^ (Bit - 1) Then
        BitOn = True
    Else
        BitOn = False
    End If
End Function

Los datos que tienes que pasar son Word y la posición del bit que buscas (1=1, 2=2, 3=4, 4=8, etc).

Para poner o quitar un bit en un Word:

Function SetBit(Word As Long, Bit As Long, Pos As Boolean) As Long
    If Pos Then
        SetBit = Word Or 2 ^ (Bit - 1)
    Else
        SetBit = Word - (Word And 2 ^ (Bit - 1))
    End If
End Function

Para rotar hacia la izquierda o hacia la derecha una palabra de 16 bits, te envío las siguientes funciones, que usé en la implementación de RC2:

Private Function RolWord(ByVal lVal As Long, Pos As Long) As Long
    Dim N As Long, lPos As Long
    For N = 1 To 16
        lPos = N + Pos
        If lPos > 16 Then lPos = lPos - 16
        RolWord = RolWord + IIf(CBool(lVal And 2 ^ (N - 1)), 1, 0) * (2 ^ (lPos - 1))
    Next
End Function

Private Function RorWord(ByVal lVal As Long, Pos As Long) As Long
    Dim N As Long, lPos As Long
    For N = 1 To 16
        lPos = N - Pos
        If lPos < 1 Then lPos = lPos + 16
        RorWord = RorWord + IIf(CBool(lVal And 2 ^ (N - 1)), 1, 0) * (2 ^ (lPos - 1))
    Next
End Function

Alvaro Redondo <merlin@sevillaonline.com>



Resumen Resumen

Visual Basic Página de Visual Basic

Página principal Página principal

www.jrubi.com