Representar números en binario: negativos, enteros, reales
Representar (o codificar) un número significa expresarlo en forma binaria. La representación de números en un ordenador es necesaria para que este pueda almacenarlos y manipularlos. En este artículo puedes ver cómo se codifican los números aunque sean muy grandes y distintos ejemplos.
Un número matemático puede ser infinito (tan grande como se desee), pero su representación en un ordenador debe ocupar un número de bits predeterminado. Por este motivo, es necesario definir el número de bits que se utilizarán y la manera de interpretarlos para que representen de la manera más eficiente posible a la entidad. Por ejemplo, sería inútil codificar un carácter utilizando 16 bits (65.536 posibilidades) cuando, por lo general, se utilizan menos de 256.
¿Cómo es la representación de un número natural en una computadora?
Un número natural es un número entero positivo o cero. La elección de la cantidad de bits depende del intervalo de números que se utilizarán. Para codificar números naturales comprendidos entre 0 y 255, solo se necesitan 8 bits (un byte) ya que 28 = 256. Por lo general, la codificación de un bit n se puede utilizar para representar números naturales entre 0 y 2n-1.
Para representar un número natural, después de haber definido el número de bits que se utilizarán para su codificación, ordena los bits en las celdas binarias según su peso binario, de derecha a izquierda. Luego, completa los bits que no se utilizan con ceros.
¿Cómo es la representación de un número entero en un ordenador?
Un número entero es un número natural que puede ser positivo o negativo. Por lo tanto, el número se debe codificar de manera que se pueda distinguir si es uno y otro y de forma que siga las reglas de la adición. El truco consiste en utilizar un método denominado complemento doble.
Un número entero o cero se representará en base binaria (base 2) como un número natural, con la excepción de que el bit de mayor peso (aquel que se encuentra más a la izquierda) representa el signo más o menos. Por lo tanto, para un número entero o cero, este bit se debe establecer en 0 (lo que corresponde al signo más, así como 1 es el signo menos). De este modo, si un número natural se codifica utilizando 4 bits, el mayor número posible será 0111 (o 7 en base decimal). Generalmente, el mayor número entero posible codificado utilizando n bits será 2n-1-1.
Un número entero negativo se codifica utilizando complementos dobles.
El principio de los complementos dobles. Se elige un número negativo. Luego, se toma su valor absoluto (su equivalente positivo) y se representa en base binaria utilizando n-1 bits. Cada bit se cambia por su complemento (es decir, los ceros se reemplazan con unos y viceversa). Se suma 1. Nótese que al sumar un número y sus complementos dobles el resultado es 0.
Veamos esto con un ejemplo: para codificar el valor 5 utilizando 8 bits, escribe el 5 en sistema binario 00000101. Luego, cámbialo por su complemento 11111010. Suma 1: 11111011. La representación binaria en 8 bits de 5 es 11111011.
Nota: el bit de mayor peso es 1, de manera que es, de hecho, un número negativo.
Si sumamos 5 y -5 (00000101 y 11111011) la suma da 0 (con el remanente 1).
¿Cómo es la representación de un número real en un PC?
El objetivo es representar un número con un punto decimal en sistema binario (por ejemplo, 101.01, que no se lee ciento uno punto cero uno, ya que es, de hecho, un número binario, 5,25 en sistema decimal) mediante el formato 1.XXXXX... * 2n (en nuestro ejemplo, 1.0101*22). El estándar IEEE 754 define cómo codificar un número real. Este estándar ofrece una forma de codificar un número utilizando 32 bits, y define tres componentes: el signo más/menos se representa por un bit (el bit de mayor peso, aquel que se encuentra más a la izquierda); el exponente se codifica utilizando 8 bits inmediatamente después del signo; la mantisa (los bits después del punto decimal) con los 23 bits restantes. Así, la codificación sigue la forma:
seeeeeeeemmmmmmmmmmmmmmmmmmmmmmm
La s representa al bit del signo, cada e representa al exponente del bit y cada m representa a la mantisa del bit.
Sin embargo, hay ciertas restricciones para los exponentes. El exponente 00000000 está prohibido. El exponente 11111111 está prohibido. Sin embargo, a veces se utiliza para informar de errores. Esta configuración numérica se denomina NaN (Not a number), que significa “no es un número”. Se le debe sumar 127 (01111111) al exponente para convertir al decimal en un número real dentro del sistema binario. Por lo tanto, los exponentes pueden variar de -254 a 255.
Así, la fórmula para expresar números reales es:
(-1)^S * 2^( E - 127 ) * ( 1 + F )
Aquí S es el bit del signo y, por lo tanto, 0 se entiende como positivo (-1^0=1); E es el exponente al que se le debe sumar 127 para obtener el equivalente codificado; F es la parte de la fracción, la única que se expresa, y la que se le suma a 1 para realizar el cálculo.
A modo de ejemplo se codificará el valor 525,5. Este número es positivo, por lo que el primer bit será 0. Su representación en el sistema binario (base 2) es: 1000001101.1. Al normalizarlo se obtiene: 1.0000011011*2^9. Sumándole 127 al exponente, que es 9, da 136 o, en sistema binario (base 2): 10001000. La mantisa está compuesta por la parte decimal de 525,5 en base 2 normal, que es 0000011011. Como la mantisa debe tomar 23 bits, se deben agregar ceros para completarla: 00000110110000000000000.
Por lo tanto, la representación binaria de 525,5 bajo el estándar IEEE 754 es:
0 1000 1000 00000110110000000000000
0100 0100 0000 0011 0110 0000 0000 0000 (4403600 en sistema hexadecimal)
A continuación otro ejemplo, esta vez utilizando un número real negativo. Se codificará el valor -0,625. El bit s es 1, como 0,625 es negativo. 0,625 se escribe en sistema binario (base 2) de la siguiente manera: 0.101. Se busca escribirlo en la forma 1.01 x 2-1. Consecuentemente, el exponente vale 1111110 como 127 - 1 = 126 (o 1111110 en sistema binario). La mantisa es 01000000000000000000000 (solo se representan los dígitos después del punto decimal, ya que el número entero es siempre equivalente a 1).
Por lo tanto, la representación binaria de 0,625 bajo el estándar IEEE 754 es:
1 1111 1110 01000000000000000000000
1111 1111 0010 0000 0000 0000 0000 0000 (FF 20 00 00 en sistema hexadecimal).