Espacio Negativo Binario

Este artículo es parte de una serie, acceder al índice de la serie.

Como se discute en nuestro artículo sobre la comprensión binaria, para que una computadora represente un número binario como menor que cero no podemos simplemente poner un signo menos delante de él como lo hacemos con la matemática. En su lugar, tenemos que determinar alguna forma de codificar el número negativo en el binario. Esto es difícil de entender exactamente lo que eso significa, pero quiero asegurarme de que entiendes EXACTAMENTE lo que eso significa. Digamos que usted tiene un 8-bit (recordar nuestro artículo binario) ‘número’ representación. Recuerde que esos 8 bits podrían ser interpretados como cualquier símbolo, solo elegimos números como podemos representar contando por unos y ceros. Dicho esto, esos 8 bits podrían ser un número entero o un número firmado, realmente no sabemos hasta que algo más especifica que vamos a interpretarlo como un número firmado (capaz de ser menor que cero). Normalmente se especifica por el programa que se está escribiendo para el equipo. En conclusión, entonces, el hecho de que utilice un sistema para representar un número negativo en binario no hace inherentemente que el número binario sea negativo. No hay ningún significado intrínseco a una serie de bits, al igual que no hay valor intrínseco a objetos objetivos y conceptos.

Los cuatro métodos más populares para codificar (representar) números binarios negativos son conocidos como “signo y magnitud”, “complemento”, “complemento de dos” y “Exceso-K”. Hay métodos alternativos también que no son tan populares como el binario negativo donde la base del número en sí es realmente negativa (siendo negativa 2).

Sign A Magnitude

Como se mencionó anteriormente en el artículo binario, la forma más fácil (en mi opinión) para representar un entero con signo en binario es simplemente asignar un poco en la secuencia para decirle si ese número es negativo o no. Por ejemplo, se establece en un estado (cero) para un número positivo, y otro estado (uno) para un número negativo. Ese bit representa el “signo”. El resto de la secuencia representa la “magnitud” que es más fácil de entender si se piensa en “magnitud” como “tamaño” y “tamaño” como “medida” y “medida” como “cantidad” …. llevando al “número”. Esto también se conoce como el valor absoluto.

Como se escribió anteriormente si se tiene un número de 8 bits y se utiliza el MSB (bit más significativo) como el “signo” (como es a menudo el caso), sólo tiene 7 bits a la izquierda para la magnitud. Con 7 bits puede representar hasta el número, o magnitud, de 127.

¿Qué pasa con cero? Bueno, hay dos maneras de representar cero. Hay un cero positivo y un cero negativo. ¿Eh salvaje? Digamos que está utilizando MSB 0 al firmar. En ese caso, cero se puede representar como 00000000, y 10000000, siendo cero positivo y cero negativo respectivamente.

En una nota avanzada, para cualquier persona que sabe, signo-y-magnitud es generalmente cómo el “significand” en “punto flotante” valores está representado.

Complementarme

Este concepto requiere la comprensión de la lógica binaria (otro artículo).

No mencionado en el artículo de lógica binaria es que esas operaciones booleanas se pueden aplicar a una secuencia de bits. Cuando esto sucede se llama una “operación bit a bit”. Encontrarás ‘operaciones bit a bit’ en muchos lenguajes de programación incluyendo lenguajes de scripting. Estos lenguajes de programación incluyen ejemplos como C, C ++, C #, Java, Pascal, etc.

En la representación de un complemento de números binarios, se tiene que la representación negativa de un número positivo es el resultado del operador NOT bitwise aplicado al número positivo.

Como ejemplo, la forma de complemento de 01001111 (79) es 10110000 (-79). Es así de simple (año, derecha). Se llama complemento de uno porque la forma negativa de un número también se puede sustraer de -0 (11111111 la representación del complemento de cero.)

Como nota adicional, cero se puede representar de dos maneras en el sistema de representación negativa del complemento: +0 – 00000000 y -0 – 11111111.

¿Dos complementos?

El complemento de dos es otro sistema que intenta arreglar los problemas del complemento. En el complemento hay dos representaciones del número cero, y cuando se suman dos números juntos hay una operación de transporte algo compleja involucrada.

El complemento de dos se basa realmente en el complemento, pero lo “mejora” algo. En pocas palabras, una representación negativa en el complemento de dos es mayor que la representación del complemento de un mismo número negativo. Lo que realmente se convierte en dos métodos simples de generar dos números de complemento

El primer método involucra un pequeño truco de mano corta. No me gusta explicar las cosas de trucos de mano corta como algunos otros hacen porque no creo que realmente explica las premisas principales. Si todo lo que ves es un engaño de mano corta, entonces solo sabes las cosas de memoria. Sin embargo, creo que he explicado el núcleo de dos complemento suficiente hasta ahora que se puede manejar esto.

Básicamente, se inicia con una secuencia de bits particular, como 101010. A continuación, se hace un bitwise NO en todos los bits a la izquierda de los primeros 1 bit, por ejemplo, llegaría a 010110. ¿Por qué es que si usted realizar un bitwise NO en 101010, obtendrá 010101 … y si agrega uno obtendrá 010110. Cualquier cosa a la derecha del primer bit será anulada por la adición de un bit.

Otra forma de verlo es pensar en decir 8 bits (aunque se puede pensar en números más altos). Ocho bits se iniciará en 0 (00000000) y proceder hacia arriba a 127 (01111111), entonces usted golpeó -128 (10000000). Esa es la forma en que -128 lo es. Entonces usted consigue a -127 que es el complemento de dos de 01111111 -> 10000001.

Sólo hay un cero – 00000000. Esto se debe a que si se intentó producir un complemento de dos de 0, se obtendría en el primer paso 11111111, pero cuando se agrega uno, vuelve a 00000000.

También hay una simplificación en la adición del complemento (en la que realmente no me metí). Para agregar dos números de complemento de dos, sólo tienes que añadirlos como si los agregas como si fueran números positivos. Fácil-pee.

Exceso de Kellogs

Exceso-K (también conocido como Exceso N) es simplemente un desplazamiento, llamado sesgo. El K (o N) representa la cantidad de sesgo. ¿Qué significa sesgo? Básicamente significa que la representación negativa de cualquier número es el sesgo añadido a ese número. Esto hace cero representado por el sesgo, y 00000000 representa el sesgo en negativo. Todo esto está hecho, según lo entiendo, de acuerdo con el número de bits que serían necesarios para representar el sesgo. De esta manera, el MSB (bit más significativo) lleva la información de signo, al igual que en el método de signo y magnitud.

Con el fin de agregar dos números en Exceso-K, usted tiene que a través de alguna aritmética. Encontré esto interesante así que lo compartiré con usted. Considérese que tiene A, B y C. La aritmética es la siguiente: A + B = C + K, y así C = (A + B) – K.

El exceso-K se usa generalmente en representaciones de punto flotante del exponente del número. Si desea un exponente de doble precisión, utilizaría una representación binaria Excess-1023 de 11 bits.

Binario negativo realmente

Ahora, hay lo que se conoce como base -2. ¿Recuerdas cuando hablaba de binario que hablé de cómo era realmente base 2? ¿Que los poderes de 2 eran los valores de lugar de los números binarios? Bueno, en la base -2, la negativa dos es la base del sistema numérico. He aquí un diagrama de lo que quiero decir:

negative_base_2_place_values

La cosa sobre la base -2 es que su capacidad de representar números es desequilibrada. Si hay un número par de bits, el número negativo representable más grande es el doble del tamaño del valor positivo más alto posible, y si hay un número impar de bits el inverso es verdadero: el número positivo representable más grande es el doble del tamaño del valor absoluto valor del valor negativo más bajo posible. Voy a dejar que el lector a trabajar que uno.

Conclusión

Eso es todo, amigos! Hay muchas maneras de representar números binarios negativos. Ninguno de ellos es necesariamente “mejor” que los otros, aunque estoy seguro de que los ingenieros de microprocesadores no estarían de acuerdo conmigo. Muchas veces se elige una representación particular porque eso es lo que se puede construir fácilmente para un microprocesador en particular. Cuando se programa en lenguaje de ensamblaje, que es lo más cercano al nivel de procesador que un programador suele obtener, debe asegurarse de saber si está tratando con una representación firmada (posiblemente negativa) o una representación sin signo. A veces hay indicadores en el microprocesador que te dirán, pero recuerda que cualquier serie de bits se puede interpretar como un valor firmado (posiblemente negativo).

Este artículo es parte de una serie, acceder al índice de la serie.

Si usted aprecia mis tutoriales y su sabiduría, por favor considere apoyarme en Patreon.

Sin embargo, si un compromiso mensual es un poco demasiado necesitado para usted, podría considerar comprarme una taza de café.

photo credit: Verdun en négatif via photopin (license)

También te podría gustar...

Deja un comentario

A %d blogueros les gusta esto: