Orga1: demostraciones sobre Complemento a 2

Anuncio
Orga1: demostraciones sobre Complemento a 2
Manuel Giménez ([email protected])
3 de abril de 2012
Esto es un apunte opcional para los que, afortunadamente, no se conforman con la frase “complemento a 2
anda y ya". Que quede claro que esto no entra en ninguna instancia de evaluación. de la materia. Cualquier
error o consulta, no duden ni un segundo en acercarse.
Justificacion del funcionamiento de sumas con C2
La pregunta que queremos contestar es: ¿por qué funciona sumar en complemento a 2 el número m con el −n?.
Primero, ¿que quiere decir sumar m y −n en complemento a 2? Es obtener la tira de bits que representa al
número m en complemento a 2, hacer lo mismo para −n, y sumar las tiras de bits como si se tratara de binarios
sin signo.
Ahora bien, ¿por qué la tira de bits resultante de esa suma, representa en complemento a 2 el número
resultado de la operación m + (−n)?
Demostración
Sea un sistema de representación de números enteros por complemento a 2, de k bits. Sean m y −n números
en el intervalo [2k−1 − 1; 2k−1 ] (es decir, son número que se pueden representar con un sistema complemento a
2 de k bits) tal que m > 0 y −n < 0
Sean m∗ y (−n)∗ las tiras de bits de las representaciones en complemento a 2 de los número m y −n respectivamente. Por definición de complemento a 2 vale que, ((−n)∗ )2 = 2k + (−n) y que (m∗ )2 = m.
El resultado de sumar las tiras m∗ y (−n)∗ como si fueran binarios sin signo, será una tira de bits r∗ tal que
(r )2 = ((−n)∗ )2 + (m∗ )2 . Luego (r∗ )2 = 2k + (−n) + m = 2k + (m − n).
∗
Casos:
Si (m − n) = 0
(r∗ )2 = 2k , por lo que r∗ = 1 0| .{z
. . 0}. Es decir, obtendremos la tira de todos ceros, y carry. Luego, el
k
resultado será la tira de k bits que en complemento a 2 representa el número cero.
Si t = (m − n) < 0
(r∗ )2 = 2k + t < 2k , por lo que sabemos que r∗ tiene a lo sumo k bits (es decir entra en nuestro sistema
de representación). Además por definición de complemento a 2, r∗ es la representación de t utilizando
complemento a 2. (pues (r∗ )2 = 2k + t y además t < 0)
Si t = (m − n) > 0
Observación: vale que (m − n) < m, luego 0 < (m − n) < m. Entonces 2k < (r∗ )2 = 2k + t < 2k + m.
Como 2k < (r∗ )2 , y necesito k + 1 bits para representar 2k en binario, podemos decir que r∗ tiene al menos
k + 1 bits.
Veamos que tiene exactamente k + 1. Como m era positivo y representable en nuestro sistema con k bits,
vale que 2k + m = (1 0| .{z
. . 0})2 + (m∗ )2 . Entonces podemos afirmar que 2k + m = 1 m∗k . . . m∗1 .
| {z }
k bits
k bits
1
Ahora, siendo que (r∗ )2 < 2k + m, podemos afirmar que la representación de r∗ tiene cómo máximo k + 1
bits. Utilizando el resultado anterior, podemos afirmar que tiene exactamente k + 1 bits. Teniendo en
cuenta que, si llamamos t∗ a la representación en binario del número t, vale que 2k + t = (2k )2 + (t∗ )2 ,
por lo que ahora sabemos que: r∗ = 1 t∗k . . . t∗1 (tener en cuenta que t < m, por lo que la representación de
| {z }
k bits
t tendrá a lo sumo k bits).
Luego, como nuestro sistema de representación es de k bits, la tira de bits resultante es t∗k . . . t∗1 y además
tendremos carry. Teniendo en cuenta la definición de complemento a 2, y que t > 0, la tira de bits resultante
representa en complemento a 2 al número t.
Vimos entonces que en todos los casos la tira de bits resultante, si es interpretada en complemento a 2,
representa el número esperado como resultado de la operación aritmética realizada.
Algoritmo del inverso aditivo en C2
Dado un número n, para encontrar la representación en complemento a 2 de su inverso aditivo (es decir −n):
Escriba en binario el número n (utilizando tantos bits como disponga su sistema de representación)
Haga un NOT bit a bit (donde hay un 0 ponga 1 y viceversa).
Tome la tira de bits resultante, e interpretándola como un numero escrito en binario, súmele 1.
La tira de bits resultante es la representación en complemento a 2 del numero n.
Lema auxiliar
Dado n un número, y n} su representación en binario de a lo sumo k símbolos, sucede que (n} )2 +
(not(n} ))2 = (2k − 1)10 .
Nota de Manu
Diferenciar bien para entender la demostración de correctitud: n es un número, y n} es una tira de símbolos
(palitos (unos) y circulitos (ceros)), que es la representación en base 2 del número n.
La demostración formal del lema no aporta nada, asi que no la pongo. Si hay algún fanático de la inducción
que quiere saberla, nos tomamos un café y le cuento cómo es.
La idea intuitiva es que al sumar las tiras de bits n} con not(n} ), cada “columna” cuando sumemos va
a tener un cero y un uno; luego en cada posición del resultado va a haber un uno - y como tenemos k posiciones, el resultado será una tira de k unos, que si lo interpretamos como un número binario, es el número 2k − 1.
Ejemplo: sucede que (9)10 = (1001)2 . Siendo que not(1001) = 0110, vale que 1001 + 0110 = 1111. Como dice
el lema, vale que (1001)2 + (not(1001))2 = (1111)2 = (24 − 1)10
Demostracion correctitud algoritmo
Qvq: El resultado del algoritmo es la representación en complemento a 2 del dato de entrada.
Dada como entrada el número m, y si llamamos m} a la tira de bits que interpretado como número binario
representa al número m, el retorno del algoritmo será la tira de bits que resulta de hacer not(m} ) + 1. (Ver
algoritmo más arriba si no me crees: niego bit a bit y después sumo 1)
Teniendo en cuenta la definición de complemento a 2, sabemos que la representación en complemento a 2 del
número (−n) es la tira de bits que interpretada como un numero binario sin signo representa al número 2k +(−n).
Ahora bien, del Lema anterior, se desprende que (not(n∗ ))2 = (2k − 1)10 − (n} )2 . Pero entonces podemos
afirmar que (not(n} ))2 + 1 = (2k − 1)10 − (n} )2 + 1 = (2k )10 + (n} )2 .
Vale entonces que la tira de bits resultante de ejecutar el algoritmo, interpretada como un número binario,
representa al número (2k )10 − (n} )2 .
2
Es decir, representa al número 2k − n. Eureka! Entonces la tira de bits resultante de ejecutar el algoritmo
es la representación en complemento a 2 de k bits del número −n.
3
Descargar