Crear una función que mueva los bit's (Por si se aparece Karkrack, Cobein o similares NO ASM-Inline) a la izquierda o derecha.
(Los Números binarios se leen de izquierda a derecha, quien no tenga idea use la calculadora de windows o investigue en google como determinar el valor en Base 10).
Los ejemplos son considerando {1 Byte = 8 Bits, con el byte de signo.} la función deberá trabajar con (4 Bytes = 32 bit's = Long)
Ejemplo 1:
Se ingresa el numero 45 de desplazan 2 bit's a la izquierda el resultado es 180
es decir en binario:
00101101 {Desplazando 2 bit's Resultado--->} 10110100
Ejemplo 2:
Se ingresa el numero (-128) se desplazan 5 bit's a la izquierda el resultado es: 0
es decir en binario:
10000000 {Desplazando 5 bit's Resultado--->} 00000000
Ejemplo 3:
Se ingresa el numero 1 se desplazan 5 bit's a la izquierda el resultado es: 32
es decir en binario:
00000001 {Desplazando 5 bit's Resultado--->} 00100000
Ejemplo 4:
Se ingresa el numero 1 se desplazan 5 bit's a la derecha el resultado es: 0
es decir en binario:
00000001 {Desplazando 5 bit's Resultado--->} 00000000
Ejemplo 5:
Se ingresa el numero (-2) se desplazan 5 bit's a la derecha el resultado es: -1
es decir en binario:
11111110 {Desplazando 5 bit's Resultado--->} 11111111
Ejemplo 6:
Se ingresa el numero (-1) se desplazan 5 bit's a la derecha el resultado es: -1
es decir en binario:
11111111 {Desplazando 5 bit's Resultado--->} 11111111
Formato de la funcion:
Código
Public Function Bits_d(ByVal lVal As Long, Optional lDesplazamiento As Integer) As Long '   //  lVal                Indica el valor ingresado (Base 10). '   //  lDesplazamiento     Indica la longitud de bit's a dezplazar. '   //  Bits_d              Retorna el resultado Final (Base 10)    ... End Function
Edito:
Codigo para probar los resultados:
Código
Private Sub Form_Load() Dim lres As Long lres = DebugAndRet(Bits_d(267614144, (-1))) lres = DebugAndRet(Bits_d(lres, (-6))) lres = DebugAndRet(Bits_d(lres, 2)) lres = DebugAndRet(Bits_d(lres, 2)) lres = DebugAndRet(Bits_d(lres, 2)) lres = DebugAndRet(Bits_d(lres, 2)) lres = DebugAndRet(Bits_d(lres, (-2))) lres = DebugAndRet(Bits_d(lres, (-24))) End Sub Private Function DebugAndRet(ByVal lVal As Long) As Long Debug.Print lVal DebugAndRet = lVal End Function
Resultados en el Debug:
Código:
535228288
-105127936
-26281984
-6570496
-1642624
-410656
-1642624
-2147483648
Resultados en Binario:
Pruebas con Test Manual...
Código:
00001111111100110111011111000000 <-- {267614144} <--- De este binario se parte...
00011111111001101110111110000000 <-- {-01}
11111001101110111110000000000000 <-- {-06}
11111110011011101111100000000000 <-- {+02}
11111111100110111011111000000000 <-- {+02}
11111111111001101110111110000000 <-- {+02}
11111111111110011011101111100000 <-- {+02}
11111111111001101110111110000000 <-- {-02}
10000000000000000000000000000000 <-- {-24} <-- {-2147483648}
Dulces Lunas!¡.