Para los que tienen dudas con los números binarios

albertoblanco
23 de Febrero del 2004
'*****************************************************
'* Suma dos numeros binarios y devuelve el resultado
'* (los numeros binarios max. de dos bytes (16 bits)
'*****************************************************
Private Function SumaBinario(Num1 As String, Num2 As String) As String
Dim N1 As Long
Dim N2 As Long

N1 = BinarioADecimal(Num1)
N2 = BinarioADecimal(Num2)

SumaBinario = DecimalABinario(N1 + N2)
End Function

'**************************************************
'* Pasa de binario a decimal una cadena
'* El numero binario tiene el bit 0 a la derecha
'**************************************************
Private Function BinarioADecimal(N As String) As Long
Dim a As Long
Dim NumBit As Long
Dim Dec As Long

NumBit = 0
Dec = 0
For a = Len(N) To 1 Step -1
If Mid(N, a, 1) = "1" Then Dec = Dec + (2 ^ NumBit)
NumBit = NumBit + 1
Next a

BinarioADecimal = Dec
End Function


'**************************************************
'* Pasa de decimal a binario un numero
'* El numero binario tiene el bit 0 a la derecha
'**************************************************
Private Function DecimalABinario(ByVal N As Long) As String
Dim NumBit As Long
Dim Bin As String
Dim Div As Long

Bin = ""
For NumBit = 15 To 0 Step -1
If Fix(N / (2 ^ NumBit)) > 0 Then
Bin = Bin & "1"
N = N - (2 ^ NumBit)
Else
Bin = Bin & "0"
End If
Next NumBit

DecimalABinario = Bin
End Function


Tener en cuenta que estas funciones estan usando 16 bits. Si necesitais que sean más largos, cambiar la funcion DecimaABinario, el bucle, en vez de 15 pon el número de bits que quieras. Ojo con los desbordamientos de los Longs si haceis eso.

En vez de hacer la suma, hacer la división o el mod, y luego la función lo convierte a binario.

Espero haber ayudado

Alberto

P.D. esto estaba ya puesto en el foro, unas paginas más adelante.