Categorías
Fundamentos del PC

Aritmética del PC: Representación de número negativos

Cuándo pensamos en el sistema binario como medio de gestión de datos en la PC, comprendemos que existen dificultades como la representación de símbolos y caracteres (para lo cual existe el sistema ASCII) e incluso a nivel numérico para representar la naturaleza misma de los números: negativos, parte decimal y la forma para operarlos aritméticamente.

En todo caso, existen mecanismos que solucionan todos estos puntos. Por ejemplo, para los números negativos, existen enfoques que van desde el signo magnitud, pasando por los sistemas basados en complementos, hasta estándares como el IEEE 754.

A continuación, realizaremos un repaso de estos mecanismos con algunos ejemplos prácticos sobre cómo se aplican.

Signo Magnitud

Se trata de un mecanismo sencillo para poder indicar la magnitud positiva o negativa de un número. Consiste en reservar un bit a modo de bandera, indicando «1» en caso de que la cantidad sea negativa o «0» si es positiva. Se reserva el bit más significativo o en otras palabras el más extremo a la izquierda.

Por ejemplo, si contamos con una capacidad de 8 bits y queremos representar el número 53, lo hacemos de la misma manera que para cualquier número en binario, mientras que utilizamos el primer bit a la izquierda para indicar que se trata de una cantidad positiva:

S 128 64 32 16 8 4 2 1
0 0 0 1 1 0 1 0 1

Si queremos cambiar la magnitud del número a negativo (-53), entonces lo hacemos mediante el bit reservado para tal fin y así tendremos: 100110101.

En definitiva una solución simple, aunque, con algunas consideraciones como:

  • Se compromete (se pierde) la posibilidad de utilizar el bit más significativo para la cantidad. Por ejemplo, si contamos con 8 bits para representar un valor, de ellos necesitamos reservar el bit en la posición más a la izquierda para el signo, por ello, perdemos la posibilidad de utilizar el bit que corresponde a 128 DEC y el máximo número a representar sería 01111111 (+127 DEC) o 10000000 (-127 DEC).
  • Existencia de cero-positivo y cero-negativo. Continuando con el ejemplo de la cantidad basada en 8 bits, el sistema admite la existencia de 1000000 (cero-negativo) o 00000000 (cero-positivo). No parece gran cosa a primera vista, pero se trata de una consideración (validación) adicional a la hora de operar aritméticamente.

Complemento a la base

Los complementos son otra alternativa para representar número negativos y facilitar las operaciones. Como su nombre lo indica, consiste en la cantidad inversa o mejor dicho, la distancia que resta entre el número y la máxima representación con la cual se trabaja.

Por ejemplo, supogamos que deseamos representar el número 56 mediante su complemento y estamos utilizando una representación máxima de 3 dígitos (número máximo 999). Para obtener el complemento de 56, debemos restar dicha cantidad a la máxima representación que es 999, por tanto, el complemento de 56 es (999 – 56) = 943.

Además, brinda alternativas para operar artiméticamente. Veamos la siguiente operación: (283 – 105) = 178

Podemos utilizar el complemento de -105 que es:

(999 – 105) = 894

Y utilizarlo para convertir la resta inicial en una suma utilizando el complemento de -105, osea 894:

(283 + 894) = 1177 (el 1 en unidades de millar es un acarreo)

En este caso, como trabajamos con una representación máxima de 3 dígitos (999) procedemos a sumar el acarreo (el 1) al resultado:

117 + 1 = 178

Y de esta manera obtenemos el mismo resultado, convirtiendo la resta en una suma utilizando el complemento del número negativo. Esto es muy útil para simplificar las operaciones que realizan las computadoras, por eso, es probable que hayas escuchado que las PC’s están optimizadas para realizar las operaciones en función de sumas (mediante el uso del complemento).

Complemento a la base – 1

El Complemento a la base – 1 se puede aplicar a la aritmética del PC, de manera que se faciliten las operaciones en sistema binario.

En este caso, para convertir un número en binario a su complemento de la base -1, debemos invertir los bits, así como lo leístes, cambias 1 por 0 y 0 por 1.

Por ejemplo, si queremos obtener el complemento de 1010 (10 DEC), invertimos los bits, de manera que obtenermos: 0101 (5 DEC).

Ahora, la pregunta que surge es: ¿Por qué invertimos los bits? Si te fijas en el ejemplo que realizamos con el número 56 hace un momento, para obtener el complemento restamos el 56 a la máxima representación que era 999 (999-56=943). De la misma forma, podemos obtener el complemento de 1010 (10 DEC) si lo restamos a la máxima representación binaria con 4 bits que sería 1111 (15 DEC) de manera que obtenemos:

1111 – 1010 = 0101 (15 DEC – 10 DEC = 5 DEC)

El resultado, ósea el complemento, es igual que invertir los bits del número al cual deseamos obtener el complemento.

Veamos otro ejemplo (-283 – 105) = -388

En la imagen (pendiente de convertir a un formato más estético), primero convertimos los valores negativos a su complemento, que en este caso corresponde a ambos números puesto que son negativos (subrayados en verde y amarillo).

Otra regla importante consiste en completar grupos de 4 bits para las cantidades de manera que podamos trabajar con una máxima representación para los valores. Por ejemplo, 283 DEC en binario es 1 0001 1011, pero, debemos completar la cantidad agregando (tres ceros) 0001 0001 1011 y así procedemos a obtener su complemento a la base – 1 que consiste en invertir cada uno de los bits, de manera que obtenemos: 1110 1110 0100.

Por último, no debemos de olvidar la suma del acarreo (fíjate en la imagen). Y posteriormente, para comprobar el resultado, convertimos nuevamente el resultado de complemento base – 1 a binario (invirtiendo los bits).