Publi

Decimal a Binario (y negativos en Complemento a 2)

Aquí traigo un fragmento de código que nos puede ayudar bastante a la hora de hacer cambios de base de decimal a binario, sobre todo porque para manejarnos con los números negativos utilizamos el Complemento a dos.

En principio, antes de hacer esta función miré un poco el blog Static Zero, y luego me decidí simplificar un poco el código. Así ha quedado:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
int *decToBin(int decimal, int nBits, int binary[]) {
    int i;

    int flag = 0;
    /* Si es un número negativo, lo hacemos positivo y le restamos 1(*), */
    /* además activamos el flag para saber que es negativo */

    /* (*) El complemento a 2 es igual que el complemento a 1, que es cambiar */
    /* 1->0, 0->1, y luego sumando 1 en binario. Aquí restamos 1 en decimal y */
    /* luego pasamos a binario. */
    if (decimal < 0)
        {
            flag = 1;
            decimal = -decimal-1;
        }

    /* Pasamos a binario, atendiendo a lo que vale flag, en lugar de añadir (decimal%2) */
    /* como es normal, le hacemos un XOR con flag, vemos la tabla de verdad de XOR */
    /* |    A    (xor)   B       =   X   |  */
    /* |     0      |        0       |   0   |  */
    /* |     0      |        1       |   1   |  */
    /* |     1      |        0       |   1   |  */
    /* |     1      |        1       |   0   |  */
    /* ------------------------------   */
    /* Por tanto, cuando flag vale 0, al encontrar un 0, pondremos un 0, y al encontrar un 1, ponemos un 1 */
    /*           Pero cuando flag vale 1, al encontrar un 0, pondremos un 1, y al encontrar un 1, ponemos un 0 */
    while (decimal > 0)
        {
            binary[--nBits] = flag^(decimal%2);
            decimal/=2;
        }

    /* Con esto terminamos de llenar el array, con 0 a la izquierda si es un número positivo */
    /* y con 1s si es un número negativo */
    while (nBits>0)
        binary[--nBits] = flag;
   
    /* Devolvemos el array */
    return binary;
}

Para descargar este código y un pequeño programa de prueba:
Pasar de decimal a binario (Negativos en complemento a 2)

También podría interesarte....

There are 8 comments left Ir a comentario

  1. Pingback: Bitacoras.com /

  2. mery /
    Usando Internet Explorer Internet Explorer 7.0 en Windows Windows XP

    necesito un programa que pueda convertir de decimal a binario, tiene que llevar un numero negativo, otro positivo, otro entero y otro en fraccion y hay q almacenarlo

  3. admin / Post Author
    Usando Mozilla Firefox Mozilla Firefox 3.0.6 en Gentoo Linux Gentoo Linux

    Para enteros positivos y negativos tienes este, para reales, es parecido, te recomiendo que leas:
    http://es.wikipedia.org/wiki/Coma_flotante
    http://es.wikipedia.org/wiki/IEEE_punto_flotante
    Para ver cómo hay que almacenarlo. Con el ejemplo, tendrías la representación del número, luego tienes que añadir la posición de la coma, depende de los decimales que tenga el número

  4. Pingback: Poesía binaria » Asignar valores a variables enteras en binario /

  5. r.doradus /
    Usando Internet Explorer Internet Explorer 7.0 en Windows Windows XP

    Orale que buen programa, eres bueno, lo probé y modifique en visual c++ y funcionó bien, loprobare para __int64 a ver que tal!

  6. admin / Post Author
    Usando Mozilla Firefox Mozilla Firefox 3.6 en Linux Linux

    @r.doradus
    Gracias !! Si lo posteas en algún sitio cuando lo adaptes, agradecería que me pasaras el link 🙂

  7. Warriors Movie Vest /
    Usando Google Chrome Google Chrome 122.0.0.0 en Windows Windows NT

    It is such an interesting and informative post, thank you for sharing the post.

  8. 카지노사이트 /
    Usando Google Chrome Google Chrome 123.0.0.0 en Windows Windows NT

    It’s a game. Five dollars is free. Try it It’s not an easy game ->-> 카지노사이트.com

Leave a Reply to admin Cancle Reply