- Variables y constantes
- Lógica proposicional, breve introducción
- Números binarios
- Operaciones lógicas, AND, OR, XOR, NOT (Y, O, O EXCLUSIVO, NO)
- Armado del Circuito ALU
Variables y constantes
Llamamos variables a cosas que cambian con el correr del tiempo y constantes a cosas que no lo hacen. Por ejemplo: el nombre, el dni y el sexo son datos constantes (suponiendo que una persona no los va a cambiar en el resto de su vida, exceptuando casos particulares que no vienen al caso…), y la edad, novios/as, dirección, número de celular y otras cosas que se pueden variar con el paso del tiempo son variables.
Así yo digo mi edad es de 40 años, dentro de un año no puedo decir lo mismo, como tampoco hubiese dicho lo mismo hace 10 años atrás. Pero si puedo decir que me llamo "Jorge" ahora, el año que viene y hace 10 años atrás. Así tenemos un nombre como constante y una edad como variable.
Lo de la variación con respecto al tiempo es relativo al entorno en el que manejemos las variables. Para nosotros es el principal, que variarán con respecto al tiempo. Otro tipo de ejemplo para variables es, en el entorno de una agenda, yo puedo ir variando entre los distintos contactos, y así quedaría que en este entorno distinto, "nombre" no es una constante, sino una variable, que varía según cambie de contacto. En nuestro entorno, en informática, nos va a interesar sólo la variación de las variables (valga la redundancia) con el correr del tiempo
En informática se trabaja mucho con variables, datos que variarán con el correr del tiempo, por más que este tiempo no sean años, sino hasta nanosegundos. Y así, a las variables les asignamos nombres, diciendo que la variable tal es igual a esto, y tenemos entonces:
A = 1
B = 0
Nombre = "Ana" (se usan comillas para decir que el valor de la variable es lo que está adentro, dado que a una variable se las llaman con letras y NO con números, y el valor de la variable es lo que está metido dentro de las comillas, llamado tipo alfanumérico).
otroNombre= Nombre (al no poner comilla, asume el sistema que la variable OtroNombre tiene el valor de la variable Nombre dado anteriormente, o sea, "Ana", quedando que el valor OtroNombre es "Ana")
C = 1 + 0 (acá tenemos una operación detrás de la igualdad), y C entonces vale 1
C = A + B
C equivale al valor que tiene A más el valor que tiene B, o sea, 1 mas 0, o sea, el valor de C es 1 (estos son valores del tipo numéricos)
C = "A" + "B"
C equivale a la concatenación de "A" y "B", así que "C" vale "AB" (AL ESTAR ENTRE COMILLAS, A Y B NO SON VARIABLES, SINO VALORES DE TEXTO!!!)
Siempre que quiero poner un valor numérico a las variables debo ponerlo SIN comillas, y si deseo un alfanumérico (letras o números) debo ponerlos CON comillas
C = "1" + "0"
Como están entre comillas, son valores de texto y NO numéricos, así que el valor de C es la concatenación de "1" y "0", así el valor de C es "10" (EN TEXTO!!)
Qué diferencia tenemos en que sea texto o numérico? Que si son numéricos puedo aplicarle operaciones matemáticas (suma, resta, multiplicación, división…). Yo a "10" no le puedo sumar 1 porque no puedo sumarle a un valor alfanumérico un valor numérico…
A todo esto tenemos otro tipo de valor, el más usado en informática / electrónica: el valor lógico. Este valor puede tener dos estados: V: Verdadero o F: Falso (como ya vimos en las proposiciones lógicas). También se los llama T o F (true o false en inglés). A nivel electrónico, decimos que "hay electricidad" o "no hay electricidad" (T o V para cuando hay y F para cuando no hay). También podemos pasar estos valores a un 1 matemático para cuando "hay" (T o V) o a un 0 para cuando "no hay" (F). Se los representa entre "." para distinguirlos:
C = .T. o C = .F., o equivalentemente, C = 1 o C = 0
Con ellos podemos hacer operaciones lógicas: AND, OR, XOR, NOT entre otras, y, con ellas, las operaciones aritméticas.
Lógica proposicional, breve introducción.
Primero, sepamos qué es una proposición.
Digamos que es un enunciado, algo que digo. Este enunciado pude ser verdad o no. Pero no deja de ser un enunciado, sin importar si es o no verdadero.
Ejemplos: "Llueve", "Hace Frío", "Uso campera": son enunciados, proposiciones.
Yo sólo digo "Llueve", puede ser cierto (que este lloviendo cuando lo digo), como no. Es verdadero o falso dependiendo el momento en que se diga. Este tipo de proposiciones, que pueden ser verdaderas o falsas, y no solo verdaderas, como por ejemplo "Agua mojada" o "Sol frío", que son constantemente o verdaderas o falsas (no busquemos la vuelta acá del hielo seco, no de el sol en otro momento o en otro lugar, nada de pavadas de ese estilo: el agua es siempre mojada y el sol nunca es frío, por lo que las proposiciones estas no cambian con el tiempo, son verdadera y falsa respectivamente.
Estos enunciados, así solos, mucho no me dicen. Sin embargo, si me pongo a jugar con ellos, puedo comenzar a armar ciertas oraciones, que terminan teniendo el concepto lógico que nos va a interesar en nuestros casos.
Ya nombramos los tres enunciados que vamos a utilizar para estos juegos:
"Llueve", "Hace Frío", "Uso campera"
Ahora nombremos los conectores con los que vamos a combinarlas: los dos principales: "sí" y "entonces", y luego otros para complicar un poco la situación, que son los que van a juntar mas de una proposición: "y", "o", "no" y un cuarto que llamémoslo "xo" que es un o exclusivo, ya veremos la diferencia con el "o" normal.
Arranquemos entonces jugando a mezclar las cosas, para armar las operaciones en la forma que nos interesará analizar. Para empezar, lo más fácil: unamos dos proposiciones:
La forma de unirlas es poniendo el "sí" al principio (tener en cuenta que este es un sí no de afirmación, sino de consulta), luego ponemos "entonces", o una coma, u luego la otra proposición.
Veamos con un ejemplo, y juntemos las proposiciones que tenemos:
"Si llueve entonces uso campera".
Acá ya estoy diciendo algo, y es que "si" se da la condición de que se cumpla la primera proposición, "entonces" se tendrá que cumplir la segunda, lo que esta luego del "entonces", diciendo así que si llegase a llover, si o si tengo que usar campera, porque es mi afirmación.
Todas las proposiciones, como vimos, pueden ser "verdaderas" o "falsas".
Tenemos entonces que si la primera parte del ejemplo: "Si llueve" es una proposición verdadera, "entonces" la última parte tiene que ser verdadera, o sea, tendría que usar campera. Resumiendo, quedaría que: "Si "algo verdadero", entonces "otro algo verdadero"", es mi comparación lógica básica, juntando dos proposiciones.
Como siempre, compliquémosla un poquito, juntemos ahora las tres, con algún nexo entre las dos primeras proposiciones, para poder decir qué pasara si esta combinación de dos se cumple, con la tercera que nos queda. Y las unimos con "y", "o" o "xo".
Empecemos entonces a ver y tratar de entender qué sucede cuando ponemos el "y" en el medio, cómo influye esto en mi resultado, en lo que irá luego del "entonces".
A mezclar entonces:
"Si llueve o hace frío entonces uso campera"
Entonces, tiene que ser TODA la primera parte verdadera, para poder hacer que la tercera lo sea.
Considerando que una proposición puede ser verdadera o falsa, y en la primera parte tenemos UNIADAS dos proposiciones con un vínculo (con "o" en este caso) tenemos una combinación de cuatro posibilidades dentro de las dos proposiciones consideradas en esta primera parte (antes del "entonces"): que "llueve" sea verdad (que esté lloviendo) o que no sea verdad, que sea falso (que no esté lloviendo), y por cada una de ellas (por el caso en que sea verdadero o por el caso en que sea falso), tenemos las mismas dos alternativas para la segunda proposición, quedando así una combinación de cuatro posibilidades:
1) Que "llueve" sea verdadero "o" que "hace frío" sea verdadero
2) Que "llueve" sea verdadero "o" que "hace frío" sea falso
3) Que "llueve" sea falso "o" que "hace frío" sea verdadero
4) Que "llueve" sea falso "o" que "hace frío" sea falso
Analicemos entonces qué sucedería con cada una de las cuatro alternativas en la tercera proposición, cómo influyen en si, si la tercera se tiene que cumplir o no, considerando que el nexo de unión entre las dos, en este primer caso, es "o".
1) si está lloviendo o está haciendo frío, entonces voy a usar campera (lo voy a hacer)
2) si esta lloviendo o no está haciendo frío, entonces uso campera (lo voy a hacer)
3) si no llueve o está haciendo frío, entonces voy a usar campera (lo voy a hacer)
4) si no llueve o no esta haciendo frío, entonces no importa lo que haga con la campera.
Veamos que sucedería ahora en las mismas cuatro combinaciones, pero con un nexo "y" entre las dos primeras
1) Que "llueve" sea verdadero "y" que "hace frío" sea verdadero
2) Que "llueve" sea verdadero "y" que "hace frío" sea falso
3) Que "llueve" sea falso "y" que "hace frío" sea verdadero
4) Que "llueve" sea falso "y" que "hace frío" sea falso
Analizando…
1) si está lloviendo y está haciendo frío, entonces voy a usar campera (lo voy a hacer)
2) si esta lloviendo y no está haciendo frío, entonces no puedo afirmar nada
3) si no llueve y está haciendo frío, entonces tampoco puedo afirmar nada
4) si no llueve y no esta haciendo frío, entonces no importa lo que haga con la campera.
Veamos qué función cumple el nexo "xo", el o exclusivo. Es similar al o, pero excluye cuando las dos proposiciones primeras son verdaderas a la vez, en ese caso (que sería el primer caso en los ejemplos del "o", no puedo decir nada para mi conclusión hacia la tercera proposición, teniendo entonces:
1) Que "llueve" sea verdadero "xo" que "hace frío" sea verdadero
2) Que "llueve" sea verdadero "xo" que "hace frío" sea falso
3) Que "llueve" sea falso "xo" que "hace frío" sea verdadero
4) Que "llueve" sea falso "xo" que "hace frío" sea falso
Analizando…
1) si está lloviendo xo está haciendo frío, entonces no importa lo que haga con la campera
2) si esta lloviendo xo no está haciendo frío, entonces uso campera (lo voy a hacer)
3) si no llueve xo está haciendo frío, entonces voy a usar campera (lo voy a hacer)
4) si no llueve xo no esta haciendo frío, entonces no importa lo que haga con la campera.
Hasta ahora viene zafando el "no" que mencionamos… ya vendrá…
Pero ahora veamos qué ha ocurrido en estos tres casos.
Un detalle en particular es que en ningún momento se dijo "no voy a usar campera", sino que "no importa lo que haga con ella"…. , al estilo yanki, un "dont care"…
Por esto, más adelante veremos que lo que nos importa es cuándo las respuestas son verdaderas y no tantos las falsas (RECORDAR ESTO!!!)
NADA me dice que si no esta lloviendo ni haciendo frío no tenga que salir con campera. Si no hace frío ni está lloviendo pero tengo una gripe impresionante, o voy a un lugar donde haya que ir con campera, o sólo porque se me ocurre, y quiero usar una campera, la uso, aunque no llueva ni haga frío. A esto se lo conoce como el caso contrario a la proposición. No puedo afirmar nada en la segunda parte (luego del "entonces") si no se cumple la primera parte (antes del "entonces")
También tenemos la recíproca, que también es un "no importa". Voy de la tercera proposición a ver si puedo deducir algo de las dos primeras: si salgo con campera: implicaría esto que esté haciendo frío o que esté lloviendo? NO, PARA NADA. Como dije, yo puedo salir con campera porque se me antoja, y no por otra razón.
Ahora, la que SÍ se cumple es la contra-recíproca, que es la negación de la última parte, me implica la negación de la primera: Si NO SALGO con campera, quiere decir que ni esta lloviendo ni está haciendo frío, porque mis condiciones eran que si esto sucedía (lloviese o que hiciese frío) tengo que salir SI O SI con campera, porque es que yo afirmo. Así, la negación de la tercera, implica la negación de la parte de adelante.
Y acá metimos, medio sin querer-queriendo, el concepto de "negación", del "no"
Veamos un poco como desglosar una proposición juntada por medio de un nexo y que a la vez la estoy negando, en un par de proposiciones independientes
Para entender en base a lo que ya tenemos
1) "llueve" y "hace frío"
2) "llueve" o "hace frío"
Ahora neguemos cada una de ellas, pero al conjunto en si, a las dos de una: para este mezclemos un poco de matemáticas en nuestro lenguaje, usando unos paréntesis:
1) no ("llueve" y "hace frío")
2) no ("llueve" o "hace frío")
Veamos cómo queda esto, metiendo el "no" adentro de cada unión de proposiciones, o sea, metiéndolas adentro de los paréntesis para eliminarlos (a los paréntesis)
El primero: si mi afirmación es "llueve y hace frío", quiere decir que está lloviendo Y haciendo frío, las dos cosas a la vez (TODA una afirmación). Ahora, si quiero negar esto, podemos deducir que con que no haga sólo una de las dos cosas, mi afirmación grupal pasaría a ser falsa: si no llueve y hace frío…o… si llueve y no hace frío… o, las dos juntas… si no llueve y no hace frío…. Todas estas 3 proposiciones me niegan la primera, la grupal, que si leemos un poco detenidamente, juntando estas tres proposiciones podemos decir que niego la grupal poniendo un "o" en vez de un "y" delante de cada negación particular, quedando así: "no (llueve Y hace frío)" es lo mismo que decir "si no llueve O no hace frío" y el "o no" coloquialmente es un "ni" (OJO!!! es de un "no o" y NO de un "no y"), quedando así "si no llueve ni hace frío"
Algo similar para el segundo caso: la afirmación original a negar es: "llueve o hace frío", quiere decir que está sucediendo alguna de las dos cosas, o bien llueve o bien hace frío (o las dos cosas a la vez, ya que no es un "xo"). Bien, ahora neguemos nuestra proposición: no (llueve o hace frío) implica que no sucede todo lo que está dentro del paréntesis: razonemos un poco como meteremos el "no" adentro, como quedaría. Como dijimos recién, AL MENOS UNA de las dos cosas tiene que estar pasando para que sea verdadero, quiere decir que si meto el no adentro queda NO está… lloviendo o haciendo frío o sea que no está lloviendo y tampoco está haciendo frío. O sea queda "no llueve Y no hace frío" como verdadero para mi negación desglosada, ya que las dos negaciones a la vez tienen que darse para que sea similar a la negación grupal.
Estos dos casos son conocidos como leyes de De Morgan, y visto ya con variables:
– (A y B) = – A o –B
– (A o B) = – A y – B
Siendo A y B dos proposiciones distintas, que así las llamaremos desde ahora. Por decir (Y SOLO COMO EJEMPLO):
Si digo "A" es lo mismo que dijese "llueve", si digo "B" es lo mismo que dijese "hace frío" y si pongo un "–" es lo mismo que decir "no".
1) no ("llueve" y "hace frío") = "no llueve o no hace frío"
2) no ("llueve" o "hace frío") = "no llueve y no hace frío"
Conociendo ya las proposiciones y las variables, mencionemos entonces un caso particular de variables lógicas: las "banderas". Éste tipo de variables se usan como señalizadores de que algo sucedió o no, para poder considerar este suceso en operaciones futuras. Supongamos que hemos realizado muchas operaciones juntas, y que con una combinación en particular de estas operaciones en un momento posterior yo puedo realizar una acción específica.
Supongamos que si llueve Y hace frío Y no hay luz O no encuentro las llaves de mi casa O tengo mucho sueño, entonces algo haré (por ejemplo, no saldré de casa). Una vez que TODAS las condiciones se dan y yo consulto si es así, yo diría: "que si llueve Y hace frío Y no hay luz O no encuentro las llaves de mi casa O tengo mucho sueño, entonces voy a poner una señalización, una variable bandera en .V.": "quedarse = .V.", voy a "activar la señal", voy a "levantar la bandera" porque esto ha sucedido. Entonces, en algún momento posterior, en los cuales, por ejemplo, puede haber dejado de hacer frío, o puedo no tener mas sueño, o cualquier otra entrada haya cambiado, pero a mí me interesa lo que había sucedido en AQUEL MOMENTO de la consulta, solamente pregunto: "es la variable quedarse = .V.?" si es así, entonces haré alguna cosa, no importando ya si en este momento no tenga más sueño.
Números binarios
En nuestra vida usamos para todo, en forma habitual, coloquial o la que sea, el sistema decimal. Digamos q es el más cómodo, porque contamos con los dedos, nada mas. Hay lugares donde se propone el sistema duodecimal, que es bastante mejor que el decimal, principalmente porque tiene cuatro factores propios, aparte del 1 y el 12 propio: 2, 3, 4 y 6 (digamos que el 5 no entra directamente, pero su división tiene apenas un decimal), o sea, tiene el 83% de factores propios, que lo hace un sistema bastante aplicable para "distribuir" o "repartir".
Protocolos introductorios y pensamientos propios menos, nosotros usamos el decimal y en informática se utiliza el binario (y el hexadecimal en algunos otros aspectos que no conciernen aquí) para el movimiento interno de datos.
Esto se debe a que internamente la computadora transporta electricidad, y podemos decir que en cierta fracción de tiempo (recontra infinitesimal) toma decisiones en base a dos o más estados distintos. Un estado es un estado eléctrico: hay electricidad o no la hay. Por tal motivo, pasando la parte física a la parte lógica, decimos que "tenemos" un "1" lógico (o .T.) cuando "tenemos" electricidad y que "tenemos" un "0" lógico (o .F.) cuando no la hay. O, análogamente, que "ponemos" en un "1" lógico y hacemos que haya electricidad o que "ponemos" en un "0" lógico y hacemos que no haya.
A partir de ahora y en adelante, comenzaremos a trabajar los valores lógicos con 0 y 1, y no más con .T. y .F., o "hay" y "no hay", o "verdadero" o "falso". Llamaremos con un 1 para un valor verdadero (.T.) y con un 0 para uno falso (.F.)
Tenemos así dos o tres estados distintos de entrada, que pueden poseer valores binarios equivalentes a que tengan o no una "carga lógica" en ese momento. Habitualmente esta carga lógica es el equivalente a 5 voltios físicos para un "1" o 0 voltios para un "0", pero tomar esto con pinzas, ya que no siempre es así.
Teniendo ya esas dos o tres entradas, a las que llamaremos con las variables "A", "B" o "C" (que pueden asumir nuestros valores lógicos "1" o "0")
Entonces, conozcamos este sistema. En el decimal tenemos 10 cifras, del 0 al 9. Una vez que llegamos a la última cifra, al 9, agregamos la cifra que sigue a la unidad de al lado y ponemos esa misma unidad en 0. Si a la izquierda no hay nada, obviamente pensaremos que hay un 0. Y el número que le sigue al 0 es el 1, y en la otra punta, cerrando el ciclo, luego del 9 viene el 0, comenzando nuevamente el ciclo. Entonces, arrancamos contando desde 0, seguimos con 1 y así… hasta llegar al 9. Entonces aumentamos 1 a la cifra de la izquierda y comenzamos el ciclo nuevamente en la misma columna, quedando un 1 donde había (tácitamente) un 0 y pasando el 9 a 0 para comenzar el ciclo decimal nuevamente, formando así el 10 (diez). Y volvemos a comenzar con el 1 en la segunda columna, el ciclo 0…9: 10, 11, 12… 19. Y repetimos… sumamos 1 al 1, quedando en 2 y oootra vez repetimos el ciclo en la primera columna: 20, 21… 29. Y así hasta llegar al último valor decimal en la segunda columna, el 9: 90, 91…. 99. Y acá repetimos lo anterior: sumamos un 1 al 0 tácito de la tercera columna, y ponemos a las otras 2 en 0, y comenzamos el ciclo: 100, 101…109… y sumamos 1 al 0 de la segunda, dejamos como esta la 3ra columna, y repetimos el ciclo en la primera… 110… 119… 120, 121… 129…//… 190, 191… 199 y pasamos al 200, luego al 201… y llegamos al 999, para pasar al 1000 y volver a repetir la historia.
Bueno, exactamente lo mismo sucede con el sistema binario, solo que en vez de tener 10 cifras, tenemos SOLAMENTE 2: el 0 y el 1. Así que, en este sistema, ni bien arrancamos llegamos siempre ahí nomás al final: 0… 1 y ya es el último, por lo que tenemos q sumarle un 1 al 0 tácito de la izquierda y poniendo en 0 y empezando el ciclo: 10, 11 y volvemos a sumarle un 1 al 0 tácito de la tercera columna: 100, 101, 110, 111 y arrancamos con la cuarta: 1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111… y repetimos con la quinta… y así sucesivamente. Como verán en este "molesto" sistema, los límites llegan "muy rápido", por lo que siempre hay que estar actualizando las columnas, de acuerdo a la operación que vayamos a hacer.
Presentamos así los primeros 16 números binarios:
0, 1, 10, 11, 100, 101, 110, 111, 1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111…
Hay formas de pasar de decimal a binario y viceversa, pero no vienen al caso explicarlas, ya que no interesa el sistema decimal, sino sólo el binario, y el tema era que conozcan qué es y cómo se "cuenta", como "contamos" en el decimal.
TODO LO VISTO HASTA AHORA FUE UNA INTRODUCCIÓN PARA QUE SE CONOZCA CON QUÉ VAMOS A TRABAJAR.
En pocas palabras, tenemos proposiciones, variables y un sistema binario. Conociendo entonces todas las herramientas que vamos a necesitar para nuestro trabajo, comencemos entonces con lo que nos concierne en este ensayo: jugar con el sistema binario y aplicarle algunas de las operaciones que tienen disponibles.
Aparte de las operaciones aritméticas básicas que todos conocemos y que aplicamos en el sistema decimal, en el sistema binario comenzaremos por otras llamadas "operaciones lógicas", utilizadas en circuitos lógicos (electrónica) y en computación (programación), para luego conocer la suma y la resta (y hasta aquí llegaremos)
Operaciones lógicas, AND, OR, XOR, NOT (Y, O, O EXCLUSIVO, NO)
Aparte de nuestras tradicionales operaciones aritméticas, como la suma o la resta o la multiplicación, en informática, más específicamente en electrónica, hay otros tipos de operaciones, llamadas operaciones lógicas. Dado que en la electrónica se puede pasar todo a dos estados: "Hay corriente" o "No hay corriente", en la informática hacemos exactamente lo mismo, ya que se le mandan instrucciones a la placa madre (parte FISICA) a través de comandos binarios por medio de la programación (parte LOGICA)
Lógicamente tenemos que si le digo "0" a la computadora (programando, nivel LOGICO), le estoy diciendo "No hay corriente" a la parte FISICA (que NO EMITA corriente), y si le digo "1", le estoy diciendo "Hay corriente" (que DEBE EMITIR). De manera inversa, si la respuesta a lo que le digamos es "con corriente", a nivel programación toma el valor "1" y si me responde un "sin corriente", va a asumir un valor "0" como respuesta. Por eso la programación muy a "bajo nivel", llamándose a los lenguajes que sirven para operar muy cerca de decirle directamente las instrucciones al procesador (como el lenguaje de máquina) es básicamente combinaciones de "0"s y "1"s, por supuesto que con un paso intermedio entre el programador y el micro en donde hay un juego de instrucciones "fáciles" de entender e implementar para el programador (no sería nada cómodo programar a puro "0"s y "1"s, uno tras otro).
Como en todas operaciones, necesitamos AL MENOS dos "partes" para obtener un resultado a partir de ellas. A estas "partes" ya las llamamos "proposiciones" en nuestra introducción de lógica, las llamamos "minuendo" y "sustraendo" en la resta, "sumando" a cada uno en la suma (ya que da lo mismo poner uno delante del otro, no "vale la pena" distinguirlos como en la resta), "dividendo" y "divisor" en la división, o "factores" en la multiplicación, que al igual que en la suma, no distinguimos entre los dos porque da el mismo resultado ponerlos en el orden que sea: "el orden de los factores no altera el producto" (vox populi, según Manolito). Y, de cada una, tenemos un resultado principal y a veces alguno extra. Más adelante hablaremos de estos extras, como por ejemplo el resto de una división (no es taaaan así tampoco el extra, pero es para que vean que puede haber algo mas aparte de los resultados…)
Pues bueno, acá, con la lógica, también tenemos 2 elementos de entrada y uno (o dos) elementos de salida. A estos "elementos" los llamaremos "variables", dado que cambian con el correr del tiempo. Y, habitualmente, las llamaremos variables "A" y variable "B" (sin las comillas) y "R" a la respuesta (y "C" al extra)
En las operaciones lógicas, la variable "C" no juega. Así que tenemos solamente dos variables de entrada (A y B) y una de salida (R).
Pongámonos de acuerdo y aceptemos que tanto A como B como C o como R pueden valer solamente 0 o 1 y ningún otro valor, solo valores binarios.
Antes de arrancar, y para marearlos un poquito, vamos a decir que también podemos operar con sólo una variable (A o B) y, en base a una de las operaciones del título, tener una respuesta R. Esta operación es la negación, el complemento, el inverso, el NOT, el NO, el "–" , como quieran llamarlo. Así:
– A = NOT(A) = NO (A)
En donde, si A es 1, el negativo de A es 0, y si A valiese 0, su inverso es 1.
O sea, si yo le aplico la función NOT(A), y si A valiese 1, la respuesta (R) tomaría el valor 0
Si A = 1, entonces:
NOT(A) = 0
Y si A = 0
NOT(A) = 1
Entremos ahora a las otras tres operaciones lógicas: AND (Y), OR (O) y XOR (O exclusivo)
Si nos acordamos algo de lo que vimos atrás en la introducción de lógica proposicional, el resultado a la operación de las dos primeras proposiciones, depende pura y exclusivamente de ellas (de las proposiciones) y de la operación lógica que las vincule.
La primera: AND (Y), conocida como "multiplicación".
Aquí, LA UNICA respuesta R es Verdadera (valor 1, hay corriente) es cuando las dos proposiciones (las dos variables de entrada: A y B) son verdaderas (LAS DOS son 1, en las dos hay corriente). De cualquier otra forma, la respuesta R es falsa (valor 0, no hay corriente). Su "tabla lógica" es:
A B R
0 0 0
0 1 0
1 0 0
1 1 1
Con este tipo de "tablas" de doble entrada trabajaremos para mostrar los valores de las respuestas R en base a las proposiciones anteriores A y B (y C)
Se le dice multiplicación, porque si en vez de "Y" pongo un "por", el resultado es el mismo: 0 x 0 = 0, 0 x 1 = 0, 1 x 0 = 0 y 1 x 1 = 1
La segunda: OR (O), conocida como "suma"
Aquí, las respuestas R son Verdaderas siempre y cuando CUALQUIERA de las dos proposiciones A o B valgan 1. CUALQUIERA DE LAS DOS O LAS DOS A LA VEZ.
Su tabla lógica es:
A B R
0 0 0
0 1 1
1 0 1
1 1 1
Se le dice suma, porque si ponemos el "mas" en lugar del "O", el resultado es el mismo:
0 + 0 = 0, 0 + 1 = 0, 1 + 0 = 0 y 1 + 1 = 1 (es 2, pero en realidad es un "hay", así que el valor es 1). En el caso de la suma en sí, veremos que 1 + 1 no va a ser ni 2 ni 1, sino 10 (valor binario de 2), o sea que R valdrá 0 y comenzarán los problemas con los terceros en discordia (las variables C que ya nombre antes, que es a donde irá a parar ese 1). Pero no nos adelantemos, asumamos esto así y listo: 1 + 1 = 1 cuando es un "O" y listo.
La tercera: XOR (o exclusivo)
Es muy parecida a la O, solamente que si A y B valen 1, R vale 0. Como bien dice, es un O exclusivo, R es 1, solamente si O BIEN A vale 1 O BIEN B vale 1, PERO NO LOS DOS.
Su tabla de verdad:
A B R
0 0 0
0 1 1
1 0 1
1 1 0
Extendamos un poco más el tema, pensemos qué pasaría si hubiesen más de 2 variables de entrada. U obtenemos esta respuesta pensando y deduciendo, o lo hacemos co un alguna regla matemática. Para las dos primeras, podemos pensar primero, y después aplicamos algunas vueltas matemáticas para ver y comparar resultados.
Para el "Y" es de entender que la única forma de que haya una respuesta Verdadera, es que ABSOLUTAMENTE TODAS las variables de entrada (sean cuantas sean) sean verdaderas.
De igual forma, pensando un poco, para la variable "O", tenemos que POR LO MENOS UNA de las variables de entrada sea verdadera, para que la respuesta sea verdadera. Pude ser una sola verdadera y las otras diez (por decir un número) sea falsa, la respuesta entonces es verdadera.
La o exclusiva, como no es de uso coloquial, sino mas de informática o de electrónica, no podemos "deducir" su comportamiento razonando. Así que abusemos un poquito de las matemáticas.
Pensemos que si tenemos 3 entradas (serían las variables A, B y C) con un MISMO nexo de unión entre ellas (un "OR", un "AND" o un "XOR"), podemos hacer la operación con las dos primeras variables (por dar un orden, nada mas, podrían hacerlo con dos que quieran primero y después usarían la que queda), obtener una variable R de salida, y a esta variable de salida le aplicamos esa misma operación con la variable que sobra, obteniendo el resultado que queremos. Veamos los resultados con algunas tablas lógicas:
AND
A B R(parcial) C R(final)
0 0 0 0 0
0 1 0 0 0
1 0 0 0 0
1 1 1 0 0
0 0 0 1 0
0 1 0 1 0
1 0 0 1 0
1 1 1 1 1
OR
A B R(parcial) C R(final)
0 0 0 0 0
0 1 1 0 1
1 0 1 0 1
1 1 1 0 1
0 0 0 1 1
0 1 1 1 1
1 0 1 1 1
1 1 1 1 1
Con el que queda, con el X-OR, vamos a dar el ejemplo con 3, pero para ver un poco como seguiría el tema, tendrían que hacerlo con cuatro y, eventualmente, con 5 y 6. Pero vamos a ver sólo con 3 y tratar de deducir, en base a ver el resultado en la tabla, que sucedería si avanzásemos con más variables
X- OR
A B R(parcial) C R(final)
0 0 0 0 0
0 1 1 0 1
1 0 1 0 1
1 1 0 0 0
0 0 0 1 1
0 1 1 1 0
1 0 1 1 0
1 1 0 1 1
Como vemos (yo lo veo, espero ustedes también) cuando con las dos primeras hay SOLO UNA verdadera, la respuesta sale verdadera, y después, si la tercera es verdadera, al ser la respuesta anterior verdadera, dos verdaderos dan falso de resultado (dado que es exclusivo). Pero si la tercera es falsa, siendo la primera (la respuesta en este caso) verdadera, la salida es verdadera. Ahora, si la salida es falsa (o las dos primeras variables son verdaderas, o las dos primeras variables son falsas), y la tercera variable es verdadera, entonces tenemos una R final verdadera, pero si la tercera variable es falsa, obtendremos, como es de esperar, una salida falsa.
Si ven un poco, verán que tenemos una salida general positiva SIEMPRE Y CUANDO SOLO una de las 3 variables es verdadera, PERO TAMBIEN es verdadera cuando LAS TRES lo son a la vez. Y la salida sería falsa, cuando son TODAS las entradas lo son o cuando DOS de las variables son verdaderas y la que sobra es falsa. Si seguimos agregando otra cuarta variable (una tal D), veremos que sigue comportándose de la misma manera (la salida temporal junto al valor de la nueva variable). Y así… Conclusión: la salida es verdadera SIEMPRE Y CUANDO UN NÚMERO IMPAR DE ENTRADAS SEAN VERDADERAS Y ES FALSA SIEMPRE Y CUANDO UN NUMERO PAR DE ENTRADAS LO SEAN (considerando al 0 como número par, ya que el resto de 0 dividido 2 es 0, por lo tanto es par). Por tal motivo se lo conoce como "detector de imparidad".
Suma
Veamos cómo sumamos en nuestro sistema, el decimal:
123 (sumando 1)
+
275 (sumando2)
—-
398 (resultado, suma)
Comenzamos desde la derecha hacia la izquierda, y vamos sumando uno a uno cada par de dígitos de los distintos sumandos, y vamos formando el resultado de la suma: 3 + 5 es 8, y lo ponemos abajo, 2 + 7 es 9, y lo ponemos abajo, 1 + 2 es 3, y lo ponemos abajo, y tenemos así el resultado total de nuestra suma, leído de izquierda a derecha: 398.
Ahora, por que lo hacemos de izquierda a derecha, y no al revés? Supongo que ya conocerán la respuesta: por si aparece algún "me llevo uno" en el medio, que es lo que vamos a ver en el siguiente caso (por supuesto que para empezar, empezamos fácil y la vamos complicando de a poco). Veamos entonces como era esto del "me llevo uno":
258
+
125
—-
383
Cómo hicimos? Otra vez, de izquierda a derecha: 8 + 5 = 13, pongo el 3 y "me llevo uno" a la columna anterior (o siguiente, depende del punto de vista: es anterior en el papel, y es la siguiente en que es la próxima a sumar): 1 (que traje de la suma de la columna anterior) + 5 + 2 = 8, y no me llevo nada, así que 2 + 1 es 3 y listo
215 8
+
1 2 5
——-
3 8 3
Y así podemos llevarnos unos cuanto "me llevo uno" seguido o salteados:
478659
+
289172
———-
767831
Con los "me llevo uno" metidos, quedaría:
417 81615 9
+
2 8 9 1 7 2
————-
7 6 7 8 3 1
Entonces así, cuando aparece un "me llevo uno" de la columna, anterior, que correctamente tendríamos que decir "me llevo 10" y no 1, sumamos los valores de las cifras de las dos columnas y le sumamos 1, y si no aparecen, sólo sumamos los dos valores y nada más. Después, con el resultado obtenido de sumar estas dos o tres cifras, veremos mi "me llevo una" a la columna que sigue…
Entendamos entonces que, aparte de las dos variables comunes (los dos sumandos), acá ya empiezan a aparecer complicaciones, y sepamos diferenciar bien las dos complicaciones: el "me llevo uno" y el "más uno que me llevaba". Uno manda a la próxima, y el otro lo traigo de la anterior. Uno usamos en la suma esta y viene de la anterior, y al otro lo mandamos a la que sigue, y en actual NO SE USA.
Espero esto se haya entendido bien, ya que es elemental para lo que sigue: la suma binaria
La suma entonces…
1001011000
+
0010100010
—————
1011111010
Por supuesto que para empezar, no nos llevamos nunca un regalito a la siguiente columna, y todo es fantástico así, pero saben perfectamente que a la situación hay que complicarla, y tenemos que ver los casos donde debemos "llevarnos uno". Hagámoslo entonces:
1001110010
+
0011101011
—————
1101011101
Uno por uno: 0 + 1 = 1 y no llevo uno; 1 + 1 es 10 (2 binario) así que acá comenzamos: pongo el 0 y "me llevo" uno (o sea 10, correctamente) a la columna que sigue, en donde ya tengo 0 + 0 y a estos le sumo el 1 del "me llevo", así que me queda: 1 + 0 + 0 = 1 y no me llevo nada (está mal dicho "no me llevo nada" , ya que doble negación sería afirmación, pero así hablamos, que le vamos a hacer, lo correcto sería "no me llevo algo", pero dejémoslo así…). Sigamos entonces: 0 + 1 sin nada traído, es 1 y nada lleva; 1 + 0 + nada = 1 y nada llevo; 0 (no traigo nada) + 1 + 1 es 10 otra vez, pongo el 0 y me llevo 1; tenemos en este que viene el otro caso: 1 "que me llevaba" + 1 + 1 = 11 (3 decimal), pongo entonces el 1 (el de la derecha) y "me llevo uno" (otra vez, 10 en realidad); 1 (que me llevaba) + 0 + 1 = 10, pongo el 0 y me llevo 1; 1 (que traigo) + 0 + 0 = 1 y no llevo nada; 0 + 1 + 0 = 1. y listo!
1101011 1 1 010 1 0
+
0 0 1 1 1 0 1 0 1 1
———————–
1 1 0 1 0 1 1 1 0 1
Veamos cada caso en particular:
Primero, sin los "y uno que me llevaba"
A es 0 y B es 0, el resultado es 0 y nada me llevo (0 entonces)
A es 0 y B es 1, el resultado es 1 y nada me llevo (0 entonces)
A es 1 y B es 0, el resultado es 1 y nada me llevo (0 entonces)
Ahora empezamos con los problemas:
A es 1 y B es 1, el resultado es 10, así que es 0 y me llevo 1
Ahora cunado tengo un "y uno que me llevaba"
1 + A es 0 y B es 0, el resultado es 1 y nada me llevo (0 entonces)
1 + A es 0 y B es 1, el resultado es 0 y me llevo 1
1 + A es 1 y B es 0, el resultado es 0 y me llevo 1
Y acá el caso "más complicado"
1 + A es 1 y B es 1, el resultado es 11, así que es 1 y me llevo 1
De esto, acá tenemos la tabla lógica de la suma
Página siguiente |