VERSION 1.0 CLASS BEGIN MultiUse = -1 'True Persistable = 0 'NotPersistable DataBindingBehavior = 0 'vbNone DataSourceBehavior = 0 'vbNone MTSTransactionMode = 0 'NotAnMTSObject END Attribute VB_Name = "cBitWise" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = False Attribute VB_Exposed = False Option Explicit ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Realiza operações BitWise em Integers (shift máximo: 15) ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Bit de sinal no Integer Private Const INT_SIGNAL_BIT = &H8000 Private Const INT_SINGLA_BIT_VALUE = 32768 ' Bits de valor no Integer Private Const INT_VALUE_BIT = &H7FFF ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Rotaciona n bits à esquerda (shift máximo: 15) ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Public Function ShiftLeft(ByVal Value As Integer, ByVal Shift As Integer) As Integer ' Cria variável auxiliar Dim lnAux As Long ' Transforma em Long lnAux = int2lng(Value) ' Executa Left lnAux = lnAux * (2 ^ Shift) ' Transforma em Integer novamente e retorna ShiftLeft = lng2int(lnAux) End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Rotaciona n bits à direita (shift máximo: 15) ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Public Function ShiftRight(ByVal Value As Integer, ByVal Shift As Integer) As Integer ' Cria variável auxiliar Dim lnAux As Long ' Transforma em Long lnAux = int2lng(Value) ' Executa Right lnAux = Int(lnAux / (2 ^ Shift)) ' Transforma em Integer novamente e retorna ShiftRight = lng2int(lnAux) End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Converte o Integer em Long (ignorando o bit de sinal, adicionando-o como valor) ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Function int2lng(Value As Integer) As Long ' Se a entrada for negetiva If (Value And INT_SIGNAL_BIT) Then ' Aplica máscara de bits de valores, adiciona bit de sinal int2lng = (Value And INT_VALUE_BIT) Or INT_SINGLA_BIT_VALUE Else ' Aplica máscara de bits de valores int2lng = Value And INT_VALUE_BIT End If End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Converte o Long em Integer (aplicando bit de sinal a nível binário) ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Function lng2int(Value As Long) As Integer ' Se entrada possuir bit negativo If (Value And INT_SINGLA_BIT_VALUE) Then ' Aplica máscara de bits de valores, adiciona bit de sinal lng2int = (Value And INT_VALUE_BIT) Or INT_SIGNAL_BIT Else ' Aplica máscara de bits de valores lng2int = Value And INT_VALUE_BIT End If End Function