===== Complementos: a 1 y 2 =====
El complemento a 1 y a 2 de un número binario permiten la representación de números negativos. El método de complemento a 2 es comúnmente usado por las computadoras para representar los negativos.
==== Complemento a 1 ====
El complemento a 1 de un número binario se obtiene representándolo primero en **SM**, es decir el bit más significativo, representa el signo y el resto de los bits la magnitud. Luego se procede de 2 formas distintas dependiendo del signo del valor a representar. El complemento a 1 **C(1)** de un valor es:
* **Si el número a representar es positivo**: la representación queda igual que en signo magnitud. Por ejemplo si tenemos el número positivo 6(10) y debemos pasarlo a **C(1)**, quedaría asi:
{{ :complemento1.png?200 |}}
* **Si el número a representar es negativo**: Se efectua el complemento dígito a dígito de la representación de la magnitud obtenida anteriormente. Veamos como representar en **C(1)** el número **-6(10)**:
Primero lo representamos en SM, como estamos usando 4 bits quedaría así
{{ :complemento1a.png?200 |}}
Luego complementamos los bits restantes
{{ :complemento1b.png?200 |}} El bit mas significativo, nos indica que el número es negativo. **-6**.
Analicemos otro ejemplo; pero ahora con 8 bits (1 byte), representemos el número -1710 en C1.
Paso 0 ) Como primer paso escribimos el número en SM:
{{ :complemento1c.png?270 |}}
Paso 1 ) Como el número a representar es negativo **(-17)**, complemento y queda así:
{{ :complemento1d.png?300 |}}
----
Ahora supongamos que tenemos un número que está en C1: **0011** ¿Cómo lo pasamos a SM?.
Paso 0) Si el número tiene en su bit más significativo un **0**, quiere decir que es positivo, entonces su representacion quedaría exactamente igual.
{{:complemento1i.png?200 |}}
\\
\\
\\
\\
Probemos otro número que está en C1: **11101100** ¿Cómo lo pasamos a SM o a binario?. **¡Lo volvemos a complementar a C1!**
Paso 0) Si el número tiene en su bit más significativo un **0**, quiere decir que es positivo, entonces su representacion quedaría exactamente igual. Este no es el caso ya el bit 7 tiene valor 1
{{ :complemento1e.png?300 |}}
Paso 1) Complemento para obtener el valor numérico en SM.
{{ :complemento1f.png?400 |}}
Pensemos ahora, en el rango de representación, dicho de otra forma, ¿Cuál es número más grande y el más chico que puedo representar con n bits?
Partamos de un ejemplo fácil con 4 bits
^C1 ^Decimal ^
| 1000| -7 |
| 1001| -6 |
| 1010| -5 |
| 1011| -4 |
| 1100| -3 |
| 1101| -2 |
| 1110| -1 |
| 1000| -0 |
| 0000| 0 |
| 0001| 1 |
| 0010| 2 |
| 0011| 3 |
| 0100| 4 |
| 0101| 5 |
| 0110| 6 |
| 0111| 7 |
Vemos que el 0 tiene doble representación, lo cual genera un problema. Veamos el rango de representación, seria así: **[ -(24-1-1), 24-1-1) ] --> (-7, 7)**
Generalizando para n bits:
''[ -(2n-1-1), 2n-1-1) ]''
----
==== Complemento a 2 ====
En la actualidad la representación más utilizada en las computadoras es complemento a dos. Sin embargo, primero estudiamos las otras representaciones dado que son más simples y sirven como una buena base para el
complemento a dos.
Veamos mediante ejemplos como pasar un número binario SM a **C2**
El complemento a 2 **C2** de un número binario se obtiene, primero lo pasamos a **C1** luego le sumamos 1, al bit menos significativo.
* **Si el número a representar es positivo**: la representación queda igual que en signo magnitud. Por ejemplo si tenemos el número positivo 6(10) y debemos pasarlo a **C(2)**, quedaría asi:
{{ :complemento2.png?200 |}}
* **Si el número a representar es negativo**: Se efectua el complemento dígito a dígito de la representación de la magnitud obtenida anteriormente. Veamos como representar en **C(2)** el número **-6(10)**:
Primero lo representamos en **SM**, luego en **C1** y para convertirlo finalmente a **C2**, le sumamos 1 al bit menos siginficativo. Como estamos usando 4 bits quedaría así
{{ :complemento2a.png?200 |}}
y ahora sumamos 1
{{ :complemento2b.png?250 |}}
Sigamos con más ejemplos, convirtamos por ejemplo con el número -74(10) a C2 trabajando con 8 bits:
* **Paso 0**) SM: Si el número tiene en su bit más significativo un **0**, quiere decir que es positivo, entonces su representacion quedaría exactamente igual. Este no es el caso **(11001010 SM)** ya el bit 7 tiene valor 1
{{ :complemento2c.png?300 |}}
* **Paso 1**) Convertimos a C1
{{ :complemento2d.png?300 |}}
* **Paso 2**) Convertimos a C2 simplemente sumando 1 al bit menos significativo
{{ :complemento2e.png?300 |}}
----
Ahora supongamos que tenemos un número que está en **C2**: **10110110** ¿Cómo lo pasamos a SM?.
**¡Lo complementamos a 2!**
* Paso 0) Analizamos el signo del bit más significativo para saber si es negativo (1). Si no fuera asi la respresentación en C2 quedaría igual
{{ :complemento2f.png?300 |}}
* Paso 1) Complementamos C1
{{ :complemento2g.png?300 |}}
* Paso 2) Sumamos 1 al bit menos significativo y nos queda el número en signo magnitud
{{ :complemento2h.png?350 |}}
Veamos el rango de representación, ¿Cuál es número más grande y el más chico que puedo representar con n bits?
Ejemplo fácil con 4 bits
^C2 ^Decimal ^
| 1000| -8 |
| 1001| -7 |
| 1010| -6 |
| 1011| -5 |
| 1100| -4 |
| 1101| -3 |
| 1110| -2 |
| 1111| -1 |
| 0000| 0 |
| 0001| 1 |
| 0010| 2 |
| 0011| 3 |
| 0100| 4 |
| 0101| 5 |
| 0110| 6 |
| 0111| 7 |
Ahora vemos que el 0 no presenta el problema de la doble representación de C1 . Veamos el rango de representación, seria así: **[ -(24-1), 24-1-1) ] --> (-8, 7)**
Generalizando para n bits:
''[ -(2n-1), 2n-1-1) ]''
----
==== Tabla Comparativa (representación en 4 bits) ====
{{ :complemento2i.png?550 |}}
{{ :complemento2h2.png?600 |}}
[[sistemas_de_numeracion|Volver]]
--- //[[mariano.vargas@gmail.com|Mariano Vargas]] LOL//
----
~~NOCACHE~~
({{counter|total}})