===== 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}})