Como es que convierto de decimal a binario?

Recuerdo que esto fue uno de los primeros ejercicios de programacion que me pusieron a hacer en Haskell, convertir de decimal a binario. Aqui una simple implementacion propia en python mientras estaba practicando pal google code jam (que la hice por gusto pq python tiene modulos para convertir de cualquier base a otra)

Juguemos a Python golf, y mandenme implementaciones con menos lineas de codigo, excelente ejercicio para los que estan aprendiendo python, como veran, un lenguaje sin pelos en la lengua, todo full sencillo.

def dec2bin(num):
    if num<0:
        return 0

    if num<=1:
        return num

    coef = num/2
    rem = num%2

    result = str(rem)

    while coef > 0:
        rem = coef%2
        coef = coef/2

        result = str(rem) + result

Envien implementaciones mas cortas, no digo que esta sea la mejor o la mas eficiente, pero me salio de lo que me acorde, parece que funciona fino para numeros positivos:

gubatron@aria:~/tmp$ time python badbinary.py
10000000000000 en binario es 1110100011010100101001010001000000000000

real    0m0.017s
user    0m0.012s
sys     0m0.004s

gubatron@aria:~/tmp$ cat /proc/cpuinfo
processor       : 0
vendor_id       : AuthenticAMD
cpu family      : 15
model           : 47
model name      : AMD Athlon(tm) 64 Processor 3200+
stepping        : 0
cpu MHz         : 2010.510
cache size      : 512 KB

3 Responses to “Como es que convierto de decimal a binario?”

  1. RomRod Says:

    en ruby simplemente es una sola línea:

    “%b” % num

    eso te devuelve el binario de num.

    Simple.

    saludos!

  2. gubatron Says:

    Lol, en python tambien se hace en una linea…

    Espero que haya sido un comentario sarcastico, la idea es ver como implementarias tu conversion de decimal a binario, no como lo puedes hacer con el lenguaje.

  3. fpalm Says:

    Antes que nada gracias por el incentivo.

    Aunque chistoso, RomRod hace un llamado de atención sobre el propósito y las restricciones sobre el ejercicio. Revisé en la documentación de python y no hay un %b para dar formato binario a un número. Tampoco hay nada similar en la librería estándar. Ahora bien, una tontería así hace mejor a un lenguaje: no.

    Voy con las implementaciones que utilizan fundamentalmente los operadores de “shift” (corrimiento) y “&” .

    def dec2bin(num):

    count = 0 # contamos el número de dígitos
    aux = num

    while aux > 0:
    aux = aux >> 1
    count += 1

    bin = ”
    for y in range(count-1, -1, -1): # para cada posición en orden inverso
    aux = str((num >> y) & 1) # devuelve 1 si es impar, 0 en caso contrario
    bin = bin + aux

    return bin

    Y captando el hecho que podemos verificar cual es el digito hacia adelante pero ir concatenando el resultado hacia atrás, tenemos.

    def dec2bin(num):

    bin = ”

    while num > 0:
    aux = num & 1
    bin = str(aux) + bin
    num >>= 1

    return bin

    Je je, este es el tuyo mi pueblo.

    Aunque estas dos soluciones hacen un poco de trampa porque los operadores “>>” y “&” ya ven la variable como un binario. Debe ser por despiste que no hay métodos directos para obtener el binario correspondiente.

    Algo del tipo:

    num.__bin__()

    Por cierto, la solución correcta es:

    10010001100001001110011100101010000000000000

    Saludos

    F. Palm

Leave a Reply