Complemento a dos

Complemento a dos

La representación en complemento a dos, al igual que la representación en signo-magnitud, usa el bit más significativo como bit de signo, facilitando la comprobación de si el entero es positivo o negativo

Difiere de la representación en signo-magnitud en la forma de interpretar los bits restantes

Consideremos un entero A de n bits representado en complemento a dos. Si A es positivo, el bit de signo, a_{n-1} es 0. Los restantes bits representan la magnitud del número de la misma forma que en la representación signo-magnitud, es decir:

\sum\limits_{i=0}^{n} 0^{n-2} \cdot a_i\text{ si }A\geq 0

El número 0 se identifica como positivo y tiene, por tanto, un bit de signo 0 y una magnitud de todo ceros. El rango de los enteros positivos que pueden representarse es, desde 0 (todos los bits son 0) hasta 2^{n-1}-1 (todos los bits son 1). Cualquier número mayor requeriría más bits

Para un número A negativo, el bit de signo, a_n-1 es 1. Los n-1 bits restantes pueden tomar cualquiera de las 2^{n-1} combinaciones. Por lo tanto, los enteros negativos pueden representarse desde -1 hasta (-2)^{n-1}, es decir:

A=(-2)^{n-1}\cdot a_{n-1}

Sería deseable asignar los bits de los enteros negativos de tal manera que su manipulación aritmética pudiera efectuarse de una forma directa, similar a la de los enteros sin signo. En la representación sin signo, para calcular el valor de un entero a partir de su expresión en bits, el peso más significativo es 2^{n-1}

El caso general correspondería a aplicar la fórmula:

A=(-2)^{n-1} \cdot a_{n-1} + \sum\limits_{i=0}^{n} 0^{n-2} \cdot a_i

Propiedades

  • Rango de valores
    (-2)^{n-1}\text{ a } 2^{n-1}-1
  • Número de representaciones del 0
    Única
  • Negación
    Ejecutar el complemento booleano de cada bit y sumar 1 al patrón de bits resultante
  • Ampliación de la longitud en bits
    Las posiciones extra se añaden a la izquierda, rellenandolas con el valor del bit de signo original
  • Regla del desbordamiento
    Si se suman dos números de igual signo (ambos positivo ó negativos), hay desbordamiento si y sólo si, el resultado tiene signo opuesto
  • Regla para la resta
    Para restar B de A, se toma el complemento a dos de B y se suma a A

Conversiones

Ejemplo: Convertir de decimal a complemento a dos

Vamos a convertir \pm 18 a complemento a dos, primero lo convertimos a binario

Número Cociente Resto
\frac{18}{2} 9 0
\frac{9}{2} 4 1
\frac{4}{2} 2 0
\frac{2}{2} 1 0

Entonces tenemos que la parte binaria es:

18_{(10} = 10010_{(2}

Para hallar el -18 hay que utilizar la negación del 18

Se ejecuta el complemento booleano de cada bit dentro de 1 palabra (recordemos que son 8 bits), entonces tenemos:

18_{(10} = 00010010_{(2}
00010010 \rightarrow 11101101

Se le suma 1 al patrón de bits resultante

11101101+1=11101110

Entonces tenemos que:

\begin{cases} 18_{(10} = 00010010_{(2} \\ -18_{(10} = 11101110_{(2} \end{cases}