[MÚSICA] Hola. Vamos a continuar con nuestra video lección 5.05, Complemento de la base y overflow aritmético, que son dos temas que están un poco relacionado y vamos a verlos por separado. Vamos a hablar primero del complemento de la base y este tema nos va a ayudar a entender mejor cómo funciona la resta con complemento, complemento de 2. Entonces vamos a asumir que vamos a tratar de restar dos números en decimales, entonces vamos a tratar de entender un poco, cómo funciona esta resta. Aquí tenemos 74 menos 36. Hagamos esta resta, 74 menos 36, normalmente a mí, 74 menos 36 requiere 6 al 4. No, no se puede, entonces tengo que hacer 6 al 14 y hago un 8 y luego a este le quito 1 y continuo restando, entonces es un algoritmo tal que es un poco complicado pero hay un truco que facilita la resta y ese truco por ejemplo es, sumar y restar 100. ¿Por qué sumar y restar 100 podría facilitarme la resta? Bueno, porque 74 más 100 menos 100 menos 36 es lo mismo que 74 menos 36, entonces yo puedo hacer este truco y luego agrupo en una forma interesante, 74 más 100 menos 36 y tal vez calcular esto un poco más fácil, que calcular 74 menos 36 directamente y luego tengo que restarle este otro 100 y restarle ese otro 100 no es otra cosa que, quitarle el bit o el dígito, en este caso más significativo, al resultado. Entonces, esa es otra forma de restar pero todavía restar 100 menos 36, que es lo ideal que nos gustaría hacer, bien esto, de hecho, se llama complemento 10 de 36, porque estamos tratando de llegar el 36 a la base y la base es 10, entonces estamos llegando a una potencia en la base. Esto, todavía es complicado de hacer, entonces vamos a hacer otra cosa y es un poquito distinta, que es que separar este 100, entre el 99 y 1. 99 más 1 es 100, entonces no hemos cambiado el resultado lo único que hicimos fue alterar la forma en que estamos representando este 100 y ahora, este 1 lo podemos sacar afuera y al sacar afuera este 1, nos queda aquí 99 menos 36. Hacer 99 menos 6 es trivial porque siempre el 9 va a ser mayor que cualquier otro número o igual, que cualquier otro número que pongamos aquí. Por lo tanto restar 99 menos algo, es trivial, es como sacar el complemento 9 de ese algo, que sería llevar [INAUDIBLE] el complemento 1 en binario. Entonces, vamos a calcular el complemento 9 de 36 y ese es fácil como dije. Del 6 al 9 son 3, del 3 al 9 son 6, listo. Ahí está mi complemento 9 de 36 y para convertir eso a complemento 10, que sería haberlo restado de 100 directamente, simplemente le sumo este 1. Entonces 63, sería el complemento 9 de 36. 64, sería el complemento 10 de 36. Okey, y cómo uso esto para restar. Bueno, yo digo aquí, 74 más, 99 menos 36, dijimos que era 63, más 1, esto es el complemento 10 de 36 menos 100. Entonces, hacemos esta resta, hacemos esta resta. 74 finalmente más 64 menos 100 y 4 más 4, 8. 7 más 6, 13. 138 menos 100, le quitamos ese 1, que es quitarle el bit más significativo y nos queda 38, que es lo mismo que habríamos obtenido si restábamos 74 menos 36 directamente. Esta resta nos da efectivamente, 38. Entonces, calcular una resta tal vez no es tan fácil, porque tengo que pedirle prestado el carry al otro número, pero podemos enseñarle a un computador hacer una resta usando este concepto. En este caso y como dice aquí, 99 menos 36 es complemento 1. Es equivalente al complemento 1 porque 99 menos 36 es el complemento 9 de 36. 99 menos 36 más 1, es el complemento 2, perdón, equivalente al complemento 2. Es el complemento 10 de 36 y gracias a esto, nosotros podemos hacer una resta fácilmente, simplemente, calculando el complemento 1 de, el complemento 9, que es equivalente al complemento 1 de 36. Le sumamos 1 con eso lo convertimos en complemento 10 de 36, que es equivalente al complemento 2 en binario, y es como el símil, no es equivalente, es el símil del complemento 2 y luego de eso, eliminamos el carry. Esto lo que significa es eliminar el carry o eliminar el bit más significativo. Entonces de ahí entendemos tal vez un poco mejor por qué llamamos complemento 1 y complemento 2 a un número. Complemento 1 de 101, por ejemplo, es cuanto nos falta para llevar a 111 y el complemento 1 por lo tanto es 010, es el complemento 1. Complemento 2 es desde 101, nuevamente todo en binario, no es cuánto me falta para llegar a 111, sino que es cuánto me falta para llegar a 1000. Y en ese caso, hay que hacer los cálculos con carry y todo pero es mucho más fácil si simplemente calculamos el complemento 1 y le sumamos 1, entonces el complemento 2 va a ser 011, lo calculé a partir de ahí. Eso nos deja meditando un poco. Nos va a dejar meditando y tal vez hagamos un par de ejercicios. Les sugiero que lo hagan, que tomen un lápiz y un papel y que hagan ejercicios de restar. Ustedes you saben restar pero es para entender un poco, cuál es el símil en decimal, de la resta en binario, usando complemento 1 y complemento 2. Bien, pues, hablemos de otro tema. Overflow aritmético. A ver, overflow, ¿de qué se trata? Se trata de los siguiente. Yo tengo registros o tengo algún tamaño de una palabra digital y un tamaño determinado y yo a veces, los sumo, a veces los resto y es posible que el resultado de esa operación, ocupe más bits que los que yo tengo disponible para mostrar. esa palabra. Cuando ocupa más bits, se produce un overflow porque necesito más bits para mostrar esa palabra. El problema es que un computador no sabe cuando ocurrió overflow, si es que no le enseñamos. Entonces aquí, tenemos cuatro ejemplos. Aquí hay un ejemplo, otro ejemplo, otro ejemplo y otro ejemplo, son cuatro ejemplos y estos cuatro ejemplos muestran una simple suma o resta y muestran cuando hay overflow. En este caso, estamos hablando de números. Eh, estos números son de 3 bits. Con 3 bits yo puedo representar hasta el 7 y tienen un número adicional, un dígito adicional ahí que es el de carry. Entonces ese dígito es, perdón, el de signo. Entonces, tenemos un dígito de signo y lo que vamos a hacer aquí, voy a hacer cuatro operaciones aritméticas, dos de las cuáles van a producir overflow. Entonces sumemos 7 más 2. Esto es el 7, este es el 2 en binario. Sabemos que el resultado va a ser 9 y 9 nosotros, sabemos que 9 es mayor que 7, por lo tanto 9 no va a caber en mi representación numérica de 3 bits más 1 bit de signo y yo voy a saber que el resultado está mal. Entonces, yo hago esta suma. 1 más 01. 1 más 1 0. Carry, entonces aparece un carry 2 ahí. 1 más 1 0, aparece un carry 3. Y 1 que es el carry más 0 más 0 es 1. Ese es el resultado. Yo miro este número y así como está yo digo, es el 9 efectivamente pero, momento, momento, estamos en representación en complemento 2, entonces estos tres son los bits de la cifra y estos aquí, me está diciendo que el número que nos dió es negativo, entonces está mal, ese resultado está mal. Si se fijan, hubo carry. El carry 1 no existió. El carry existió, el carry 3 existió y no hubo carry 4, el carry 4 fue 0. Entonces esa es la condición que ocurrió. Hacemos otro. Menos 7 más 2. El menos 2, el complemento 2 es este número. ¿Estamos seguros de que ese es el menos 7 en complemento 2? Bueno, el 7 es esto, 1 1 1. El menos 7 en complemento 2, este es mi número, este es el 7, le hacemos el complemento 1, me da 1 0 0 0, le sumamos 1 y por lo tanto esto es el menos 7 en complemento 2, perfecto. Entonces, lo que estamos haciendo aquí es, restar menos 7 de 2 y al hacer esto, simplemente sumamos como sumamos normalmente, 1 más 0 1, 0 más 1 1, 0 más 0 0, 1 más 0 1. No hubo ningún carry. Carry 3 y carry 4 son 0. Y curiosamente este resultado es menos 5 efectivamente, entonces el resultado fue correcto aquí. Aquí fue incorrecto. Si hacemos lo mismo con esta resta y con esta suma de números negativos, nos vamos a dar cuenta de que en este caso, hubo un overflow, por lo tanto este resultado está malo y en este caso, no hubo overflow, por lo tanto, el resultado está bueno. ¿Cómo decirle al computador que está haciendo esta resta, que le estamos enseñando a restar, cuando hay overflow? Entonces, para detectar si hay overflow lo que hay que hacer es el MSB, el bit más significativo y el bit de signo son distintos. En realidad lo que hay que mirar es el carry. Entonces lo que tenemos que mirar es, si hubo carry 3 y si hubo carry 4. Cuando miramos eso y hacemos una simple operación, que es carry 3 por exclusivo carry 4. Si esta operación me da un 1, porque carry 3 y carry 4 son distintos, entonces hay un overflow. Y así detectamos overflow. En este caso, carry 3 y carry 4 son iguales, los don son 0. No hay overflow. En este caso, carry 3 y carry 4 son 1, no hay overflow. Pero en este caso y en este caso son distintos y cuando son distintos, hay overflow. Entonces, lo que hay que mirar es el carry del bit más significativo, el carry del signo y ver si es que hay overflow en esos casos. Hice estos dos ejemplos, hagan ustedes en sus casas, estos otros dos, por favor. Muy bien. ¿Qué vimos, hoy día? Vimos complemento de la base, vimos como, esta forma de entender la resta en binario, usando complemento 1 y complemento 2, con su símil en resta en decimales, usando complemento 9 y complemento 10 y miramos también el overflow aritmético y aprendimos cómo decirle al computador, que el número de bits con los que llega al resultado, está malo. Por ejemplo aquí, nos da el más 5. Habíamos dicho que da el más 5, sí y, ¿qué pasa con este bit? Bueno, cuando hay overflow a ver, cuando el número de bits con los que yo quiero representar mi resultado, excede el número de bits que yo tengo para representar mi resultado, yo puedo deshacerme del bit más significativo. Y si me deshago del bit más significativo, como en este caso, no pasa nada cuando hay overflow, está todo bien. En cambio aquí, no me puedo deshacer del bit más significativo porque es parte del resultado y aquí tengo overflow, entonces, lo que aprendimos aquí es cómo determinar cuando existe overflow, cuando no podemos deshacernos de ese bit que excede el espacio que yo tengo para representar mi número. Muy bien. Gracias por ver esta clase. [AUDIO_EN_BLANCO]