Para los que tienen dudas con los números binarios
'*****************************************************
'* 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.
'* 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.
