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)
Pingback: Bitacoras.com /
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
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
Pingback: Poesía binaria » Asignar valores a variables enteras en binario /
Orale que buen programa, eres bueno, lo probé y modifique en visual c++ y funcionó bien, loprobare para __int64 a ver que tal!
@r.doradus
Gracias !! Si lo posteas en algún sitio cuando lo adaptes, agradecería que me pasaras el link 🙂