Números negativos

Hasta ahora, de forma implícita hemos asumido que todos los números con que trabajamos son enteros positivos. Sin embargo, en ocasiones interesará trabajar con enteros negativos o, incluso, con números con decimales.

En el sistema de numeración decimal son enteros negativos, por ejemplo, el -37 o el -64. Pues bien, en los sistemas binario y hexadecimal también es posible trabajar con números negativos.

La característica de todo número negativo (ej. -37) es que es el opuesto de otro positivo (ej. 37). Por tanto, dado que los números positivos ya están dominados, la clave está en localizar los opuestos.

Ahora fijémonos en el número 37 en binario: %00100101. Si cambiamos los 0’s por 1’s y los 1’s por 0’s obtenemos lo que se llama su complemento o complemento a uno: %11011010. Y si sumamos un número más su complemento, lo que se obtiene es todo 1’s, es decir, %11111111 o, lo que es lo mismo, 255 en decimal o $ff en hexadecimal.

Pues bien, si además de sumar el complemento también sumamos 1, lo que se obtiene es %100000000 (9 bits) o, lo que es lo mismo, 256 o $100 en hexadecimal. Y si ahora tenemos en cuenta que el C64 es una máquina de 8 bits, y que el bit más significativo (bit 8 contando desde 0) se perderá o, a lo sumo, irá a parar al flag C del registro de estado (esto se verá más adelante), la conclusión es que se obtiene %00000000 (8 bits) o, lo que es lo mismo, 0 en decimal o $00 en hexadecimal.

Es decir, hemos encontrado un número (llamado “complemento a dos”) que, sumado al número de partida (37), nos da cero. Por tanto, el complemento a dos viene a ser el opuesto del número de partida (-37). Y se obtiene fácilmente calculando el complemento y sumando 1.

De este modo, los opuestos o complementos a dos de los siguientes números son:

Complemento a dos

Obsérvese que todos los números considerados negativos, los complementos a dos, tienen un 1 en el bit más significativo, el bit 7, mientras que los otros números tienen un 0 en ese bit. Por eso al bit 7 se le suele llamar bit de signo.

El microprocesador 6510 puede sumar y restar, pero, curiosamente, la resta la implementa obteniendo el complemento a dos y sumándolo. Esto es así porque el complemento a dos es muy fácil de obtener: sólo hay que cambiar los 0’s por 1’s y viceversa, y luego sumar 1.

Por último, conviene notar que los bytes como tal no son positivos ni negativos. Sólo son eso: bytes o paquetes de bits. Es el programador el que debe saber si el número ahí almacenado debe interpretarlo como un número sin signo (del 0 al 255) o con signo (del -128 al 127), y actuar en consecuencia.


Programa de ejemplo: Prog04

Deja un comentario