jueves, 30 de junio de 2011

ANSI C: Sistema binario y operaciones binarias

La mejor manera de demostrar el entendimiento sobre un tema, es explicándolo en términos sencillos. Debido a esto, para abordar el tema del Sistema Binario y algunas de sus operaciones más importantes, decidí realizar el siguiente mini tutorial dividido en 5 lecciones. Este tutorial, aunque contiene en su mayoría texto, decidí realizarlo como si fuera un programa, con el objetivo de practicar el uso del editor emacs en Linux, que es el editor utilizado durante el curso de verano de ANSI C y practicar la sintaxis y estructura del lenguaje.

Una vez compilado el código, obtendremos la siguiente salida en la terminal:

******************************************
Aprendiendo el idioma de las computadoras
******************************************
Bienvenido!! Aqui podras aprender acerca del
idioma que utilizan las computadoras para interpretar
el mundo que nos rodea.


LECCION 1: QUE ES EL SISTEMA BINARIO

Podria decirse que el sistema binario es el idioma
que hablan las computadoras. A traves de este idioma
las computadoras interpretan el mundo que nos rodea.

En que consiste este idioma?
Una computadora contiene muchos circuitos electronicos
en su interior. Estos circuitos solamente pueden hacer
dos cosas: apagarse o encenderse, por lo tanto, 
a la computadora le basta saber dos simbolos: uno que
represente a "apagado"y otro para representar
a "encendido".

Los dos simbolos que forman el idioma de las computadoras
son el cero y el uno. Asi de sencillo!!!


Sabias que...
El primer registro de la palabra "computador" data de 1613
y se referia a la persona que realizaba calculos.


LECCION 2: COMO VE LOS NUMEROS LA COMPUTADORA

Si solamente pudieras utilizar unos y ceros para contar,
como le harias? Este es un dilema al que se enfrentan
nuestras computadoras todos los dias de sus vidas.
Y aunque parezca algo muy dificil, escribir numeros con
unos y ceros es casi lo mismo que escribir los numeros
como estamos acostumbrados.

Los numeros que utilizamos de manera cotidiana estan formados
por diez digitos: 0,1,2,3,4,5,6,7,8 y 9.
El sistema binario solamente tiene dos digitos: 0 y 1.
Cuando contamos con nuestros diez digitos, despues del 9
escribimos un 1 y colocamos un 0 a la derecha para formar
el numero que le sigue a 9.
Con el sistema binario ocurre lo mismo: cuando llegamos al 1
y como no existe el 2, volvemos a escribir 1 seguido
 de un 0 a la derecha. Asi se representan el 0, 1, 2 y 3 que conocemos
en el sistema binario:
Decimal Binario
0 0
1 1
2 10
3 11

Como te imaginas que se representa entonces el 4?
En este punto ya volvimos a usar nuestras dos cifras,
por lo tanto, volvemos a colocar el 1, pero esta vez
seguido por dos ceros para representar al 4: 100.
Asi se representan el 4, 5, 6 y 7 en binario:
Decimal Binario
4 100
5 101
6 110
7 111

Puedes adivinar como se escribe entonces el 8?
Pues el 8 se escribe asi: 1000. Los numeros que le siguen
se escriben como si comenzara a entrar un 1 por la derecha
y se detuviera hasta encontrarse con el 1 original.

Pero que pasaria si solamente pudieras ver el numero
cuando esta escrito en binario? Como lo cambiarias a decimal?
Cuando aprendemos a contar olvidamos que todos los numeros
se pueden representar como sumas de numeros mas pequenios,
por ejemplo: 123 = 100 + 20 + 3
Ahora bien, 100 se puede ver tambien de la siguiente manera: 
100 = 1 x 10 x 10. La multiplicacion de 10 x 10 es lo mismo que
elevar el 10 a la potencia 2. Igualmente, 20 tambien se escribe
como una multiplicacion de 10: 20 = 2 x 10. El 10 solito es
lo mismo que elevar el 10 a la potencia 1. Finalmente, el 3
es: 3 x el 10 elevado a la potencia 0, pero como todo numero
elevado a la potencia 0 es siempre 1, entonces nos queda 3 x 1.
La razon por la que utilizamos 10 es porque nuestro sistema decimal
esta formado por 10 digitos. Entonces, en el sistema binario, en vez
de utilizar el 10, utilizamos el 2 de la misma manera. Asi, si
tuvieramos este numero binario: 1001, podemos saber cual es su
representacion decimal a traves de sumas y multiplicaciones con 2:
1001 = 1 x 2 elevado a la potencia 3 + 
       0 x 2 elevado a la potencia 2 + 
       0 x 2 elevado a la potencia 1 + 
       1 x 2 elevado a la potencia 0

Es decir: 1001 = 1 x 8  +  0 x 4  +  0 x 2  +  1 x 1 = 8 + 1 = 9

Ahora te toca a ti:
Ejercicio 1: Como se representa el 1256 en binario?
Ejercicio 2: Como se representa el 1110001 en decimal?


LECCION 3: COMO VE LAS LETRAS LA COMPUTADORA

En la leccion anterior observamos la forma en que la
computadora ve los numeros que ocupamos en nuestro sistema
decimal. Ahora sabremos como puede interpretar nuestras letras.
Si recordamos que la computadora solamente "conoce"
ceros y unos, entonces, como puede entender una letra?
Pues bien, para que una computadora pueda entender una letra
es necesario que esta se convierta en un numero decimal,
y como ya sabemos transformar decimales a binarios,
al llegar a este punto podemos decir que entonces conocemos
la representacion de una letra en la computadora.
Los numeros decimales que representan a una letra, estan definidos
dentro de un estandar llamado codigo ASCII. En internet se puede
encontrar la tabla de correspondencias para averiguar cuales son
los valores decimales que se utilizan para las letras. Por ejemplo:
consultando la tabla ASCII, observamos que la letra A (mayuscula)
se puede representar con el 65. Por lo tanto, cuando escribes
texto, y tecleas esta letra, lo que en realidad ve la computadora
es: 1000001, que es la representacion binaria de 65.

Ahora te toca a ti:
Ejercicio 3: Si tu fueras una computadora,
Como verias este grupo de letras?: H o L a
Consulta la tabla ASCII para obtener los valores necesarios.


LECCION 4: COMO MULTIPLICAR SIN MULTIPLICACION Y COMO DIVIDIR
SIN DIVISION

Observa que mientras mas grande sea un numero, su representacion
binaria es cada vez mas larga. Y mientras mas hacia la izquierda
se encuentra un digito, mayor sera su valor. Entonces, que pasa
cuando recorremos un numero binario hacia la izquierda en una
posicion y agregamos un cero en el extremo derecho para que ocupe
ese lugar que se recorrio? Observa con atencion:
Supongamos que tenemos el numero 4 en binario: 100 y ahora
recorremos todos sus digitos una posicion a la izquierda y ademas
agregamos un cero en el extremo derecho: 1000. Este nuevo numero
es el 8 en decimal que equivale a multiplicar 4 por 2. Entonces
al empujar un numero binario hacia la izquierda, lo que estamos
haciendo es duplicar ese numero tantas veces como hayamos recorrido
sus cifras a la izquierda, si por ejemplo recorremos el numero 1
(1 en binario) en dos posiciones a la izquierda obtendremos: 100
(4 en decimal) que equivale a duplicar el 1 dos veces, es decir:
1 x 2 x 2.

Haciendo corrimientos hacia la izquierda se puede duplicar un numero
binario. Te imaginas lo que pasa si los corrimientos los hacemos
hacia la derecha?. Como la derecha es el opuesto a la izquierda,
asi tambien ocurre lo opuesto al recorrer un numero binario a la
derecha: en lugar de aumentarle digitos, los eliminamos y en lugar
de multiplicar el resultado tantas veces sea necesario por 2, ahora
tendremos que dividir entre 2 el numero de veces que hayamos
recorrido nuestras cifras. Por ejemplo: el numero 8 en binario
es 1000, si recorremos estas cifras 2 veces hacia la derecha,
obtenemos 10, que es el 2 en decimal y que se obtiene al dividir
al 8 dos veces entre 2: 8/2 y el resultado otra vez entre 2.
Estas operaciones de recorrer cifras se conocen como Empujes y
tal como se vio, los empujes sirven para multiplicar o dividir
un numero de una manera poco convencional.

Ahora te toca a ti:
Ejercicio 4: Cual es el resultado de empujar al numero 14
3 posiciones hacia la izquierda?
Ejercicio 5: Cual es el resultado de empujar al numero 27
4 posiciones a la derecha?


LECCION 5: EXPLORANDO LA LOGICA DE LAS COMPUTADORAS

Existen otro tipo de operaciones que las computadoras pueden
realizar con los digitos de un numero binario. Estas operaciones
se llaman Operaciones Logicas Binarias. Se les llama logicas
porque trabajan con valores de verdadero y falso. Estos valores
tambien pueden ser representados mediante el 1 (para verdadero)
y el 0 (para falso).
La primera de ellas es el Y. Esta operacion tiene la caracteristica
de que solamente arroja como resultado el valor de verdadero cuando
trabaja con dos valores que tambien son verdaderos. En binario,
entonces el resultado solamente es 1 cuando los dos valores que
utiliza la operacion Y son 1 y 1. Como se realiza esta operacion?
Supongamos que tenemos el numero 110 y el numero 101, la operacion
Y compara digito a digito y produce un resultado dependiendo de sus
valores y comenzando de derecha a izquierda, asi: 110 & 101 arroja
como resultado: 100. El simbolo de esta operacion es el & (ampersand).

La segunda operacion es el O binario, que se representa con el simbolo
|, esta operacion arroja falso (es decir 0) solamente cuando ambos
valores son 0, en los demas casos, basta con que uno de ellos sea 1
para que obtengamos verdadero (es decir 1). Por ejemplo, si tenemos
los numeros 1001 y 1100 y realizamos la operacion de O entre ellos:
1001 | 1100 el resultado es: 1101.

La tercera operacion que analizaremos es la negacion o el NO.
Se representa con el simbolo: ~.
Esta operacion significa colocar el valor contrario
al valor que se tenga. Por ejemplo, para el numero 101, al
aplicar la negacion, el resultado es: 010. Observa que en esta
operacion no es necesario tener dos numeros para realizarla y que
es muy sencilla: cambia los 1s por 0s y los 0s por 1s.

Otra operacion es el llamado O exclusivo, representado por ^.
Con el O exclusivo, podemos obtener verdadero siempre y cuando
los valores a comparar sean diferentes, es decir sean 0 y 1.
Por ejemplo, teniendo los numeros 1010 y 0101, al aplicar el O
exclusivo obtendremos: 1010 ^ 0101 = 1111 puesto que
todas sus cifras son diferentes

Ahora te toca a ti:
Ejercicio 6: Realiza las cuatro operaciones logicas vistas
en esta leccion con los siguientes numeros y escribe su valor
en decimal: 11001101011, 1101110111


RESPUESTAS A LOS EJERCICIOS

Ejercicio 1: El numero 1256 en binario es 10011101000.
Ejercicio 2: El numero 1110001 en decimal es 113.
Ejercicio 3: Las letras H o L a se verian de la siguiente
manera: 1001000 1101111 1001100 1100001.
Ejercicio 4: 112
Ejercicio 5: 1
Ejercicio 6:
11001101011 = 1643
1101110111 = 887
1643 & 887 = 611
1643 | 887 = 1919
~1643 = 4294965652
~887 = 4294966408
1643 ^ 887 = 1308

El código fuente es el siguiente:


#include <stdio.h>


int main(int argc, char** args){

  printf("******************************************\n");
  printf("Aprendiendo el idioma de las computadoras\n");
  printf("******************************************\n");
  
  printf("Bienvenido!! Aqui podras aprender acerca del\n");
  printf("idioma que utilizan las computadoras para interpretar\n");
  printf("el mundo que nos rodea.\n\n\n");

  printf("LECCION 1: QUE ES EL SISTEMA BINARIO\n\n");
  printf("Podria decirse que el sistema binario es el idioma\n");
  printf("que hablan las computadoras. A traves de este idioma\n");
  printf("las computadoras interpretan el mundo que nos rodea.\n\n");
  printf("En que consiste este idioma?\n");
  printf("Una computadora contiene muchos circuitos electronicos\n");
  printf("en su interior. Estos circuitos solamente pueden hacer\n");
  printf("dos cosas: apagarse o encenderse, por lo tanto, \n");
  printf("a la computadora le basta saber dos simbolos: uno que\n");
  printf("represente a \"apagado\"y otro para representar\n");
  printf("a \"encendido\".\n\n");
  printf("Los dos simbolos que forman el idioma de las computadoras\n");
  printf("son el cero y el uno. Asi de sencillo!!!\n\n\n");

  printf("Sabias que...\n");
  printf("El primer registro de la palabra \"computador\" data de 1613\n");
  printf("y se referia a la persona que realizaba calculos.\n\n\n");

  printf("LECCION 2: COMO VE LOS NUMEROS LA COMPUTADORA\n\n");
  printf("Si solamente pudieras utilizar unos y ceros para contar,\n");
  printf("como le harias? Este es un dilema al que se enfrentan\n");
  printf("nuestras computadoras todos los dias de sus vidas.\n");
  printf("Y aunque parezca algo muy dificil, escribir numeros con\n");
  printf("unos y ceros es casi lo mismo que escribir los numeros\n");
  printf("como estamos acostumbrados.\n\n");

  printf("Los numeros que utilizamos de manera cotidiana estan formados\n");
  printf("por diez digitos: 0,1,2,3,4,5,6,7,8 y 9.\n");
  printf("El sistema binario solamente tiene dos digitos: 0 y 1.\n");
  printf("Cuando contamos con nuestros diez digitos, despues del 9\n");
  printf("escribimos un 1 y colocamos un 0 a la derecha para formar\n");
  printf("el numero que le sigue a 9.\n");
  printf("Con el sistema binario ocurre lo mismo: cuando llegamos al 1\n");
  printf("y como no existe el 2, volvemos a escribir 1 seguido\n ");
  printf("de un 0 a la derecha. Asi se representan el 0, 1, 2 y 3 que conocemos\n");
  printf("en el sistema binario:\n");
  printf("Decimal\tBinario\n");
  printf("0\t0\n");
  printf("1\t1\n");
  printf("2\t10\n");
  printf("3\t11\n\n");
  
  printf("Como te imaginas que se representa entonces el 4?\n");
  printf("En este punto ya volvimos a usar nuestras dos cifras,\n");
  printf("por lo tanto, volvemos a colocar el 1, pero esta vez\n");
  printf("seguido por dos ceros para representar al 4: 100.\n");
  printf("Asi se representan el 4, 5, 6 y 7 en binario:\n");

  printf("Decimal\tBinario\n");
  printf("4\t100\n");
  printf("5\t101\n");
  printf("6\t110\n");
  printf("7\t111\n\n");

  printf("Puedes adivinar como se escribe entonces el 8?\n");
  printf("Pues el 8 se escribe asi: 1000. Los numeros que le siguen\n");
  printf("se escriben como si comenzara a entrar un 1 por la derecha\n");
  printf("y se detuviera hasta encontrarse con el 1 original.\n\n");

  printf("Pero que pasaria si solamente pudieras ver el numero\n");
  printf("cuando esta escrito en binario? Como lo cambiarias a decimal?\n");
  printf("Cuando aprendemos a contar olvidamos que todos los numeros\n");
  printf("se pueden representar como sumas de numeros mas pequenios,\n");
  printf("por ejemplo: ");
  printf("123 = 100 + 20 + 3\n");
  printf("Ahora bien, 100 se puede ver tambien de la siguiente manera: \n");
  printf("100 = 1 x 10 x 10. La multiplicacion de 10 x 10 es lo mismo que\n");
  printf("elevar el 10 a la potencia 2. Igualmente, 20 tambien se escribe\n");
  printf("como una multiplicacion de 10: 20 = 2 x 10. El 10 solito es\n");
  printf("lo mismo que elevar el 10 a la potencia 1. Finalmente, el 3\n");
  printf("es: 3 x el 10 elevado a la potencia 0, pero como todo numero\n");
  printf("elevado a la potencia 0 es siempre 1, entonces nos queda 3 x 1.\n");
  printf("La razon por la que utilizamos 10 es porque nuestro sistema decimal\n");
  printf("esta formado por 10 digitos. Entonces, en el sistema binario, en vez\n");
  printf("de utilizar el 10, utilizamos el 2 de la misma manera. Asi, si\n");
  printf("tuvieramos este numero binario: 1001, podemos saber cual es su\n");
  printf("representacion decimal a traves de sumas y multiplicaciones con 2:\n");
  printf("1001 = 1 x 2 elevado a la potencia 3 + \n");
  printf("       0 x 2 elevado a la potencia 2 + \n");
  printf("       0 x 2 elevado a la potencia 1 + \n");
  printf("       1 x 2 elevado a la potencia 0\n\n");

  printf("Es decir: 1001 = 1 x 8  +  0 x 4  +  0 x 2  +  1 x 1 = 8 + 1 = 9\n\n");
  printf("Ahora te toca a ti:\n");
  printf("Ejercicio 1: Como se representa el 1256 en binario?\n");
  printf("Ejercicio 2: Como se representa el 1110001 en decimal?\n\n\n");

  printf("LECCION 3: COMO VE LAS LETRAS LA COMPUTADORA\n\n");
  printf("En la leccion anterior observamos la forma en que la\n");
  printf("computadora ve los numeros que ocupamos en nuestro sistema\n");
  printf("decimal. Ahora sabremos como puede interpretar nuestras letras.\n");
  printf("Si recordamos que la computadora solamente \"conoce\"\n");
  printf("ceros y unos, entonces, como puede entender una letra?\n");
  printf("Pues bien, para que una computadora pueda entender una letra\n");
  printf("es necesario que esta se convierta en un numero decimal,\n");
  printf("y como ya sabemos transformar decimales a binarios,\n");
  printf("al llegar a este punto podemos decir que entonces conocemos\n");
  printf("la representacion de una letra en la computadora.\n");
  printf("Los numeros decimales que representan a una letra, estan definidos\n");
  printf("dentro de un estandar llamado codigo ASCII. En internet se puede\n");
  printf("encontrar la tabla de correspondencias para averiguar cuales son\n");
  printf("los valores decimales que se utilizan para las letras. Por ejemplo:\n");
  printf("consultando la tabla ASCII, observamos que la letra A (mayuscula)\n");
  printf("se puede representar con el 65. Por lo tanto, cuando escribes\n");
  printf("texto, y tecleas esta letra, lo que en realidad ve la computadora\n");
  printf("es: 1000001, que es la representacion binaria de 65.\n\n");

  printf("Ahora te toca a ti:\n");
  printf("Ejercicio 3: Si tu fueras una computadora,\n");
  printf("Como verias este grupo de letras?: H o L a\n");
  printf("Consulta la tabla ASCII para obtener los valores necesarios.\n\n\n");

  printf("LECCION 4: COMO MULTIPLICAR SIN MULTIPLICACION Y COMO DIVIDIR\n");
  printf("SIN DIVISION\n\n");

  printf("Observa que mientras mas grande sea un numero, su representacion\n");
  printf("binaria es cada vez mas larga. Y mientras mas hacia la izquierda\n");
  printf("se encuentra un digito, mayor sera su valor. Entonces, que pasa\n");
  printf("cuando recorremos un numero binario hacia la izquierda en una\n");
  printf("posicion y agregamos un cero en el extremo derecho para que ocupe\n");
  printf("ese lugar que se recorrio? Observa con atencion:\n");
  printf("Supongamos que tenemos el numero 4 en binario: 100 y ahora\n");
  printf("recorremos todos sus digitos una posicion a la izquierda y ademas\n");
  printf("agregamos un cero en el extremo derecho: 1000. Este nuevo numero\n");
  printf("es el 8 en decimal que equivale a multiplicar 4 por 2. Entonces\n");
  printf("al empujar un numero binario hacia la izquierda, lo que estamos\n");
  printf("haciendo es duplicar ese numero tantas veces como hayamos recorrido\n");
  printf("sus cifras a la izquierda, si por ejemplo recorremos el numero 1\n");
  printf("(1 en binario) en dos posiciones a la izquierda obtendremos: 100\n");
  printf("(4 en decimal) que equivale a duplicar el 1 dos veces, es decir:\n");
  printf("1 x 2 x 2.\n\n");
  printf("Haciendo corrimientos hacia la izquierda se puede duplicar un numero\n");
  printf("binario. Te imaginas lo que pasa si los corrimientos los hacemos\n");
  printf("hacia la derecha?. Como la derecha es el opuesto a la izquierda,\n");
  printf("asi tambien ocurre lo opuesto al recorrer un numero binario a la\n");
  printf("derecha: en lugar de aumentarle digitos, los eliminamos y en lugar\n");
  printf("de multiplicar el resultado tantas veces sea necesario por 2, ahora\n");
  printf("tendremos que dividir entre 2 el numero de veces que hayamos\n");
  printf("recorrido nuestras cifras. Por ejemplo: el numero 8 en binario\n");
  printf("es 1000, si recorremos estas cifras 2 veces hacia la derecha,\n");
  printf("obtenemos 10, que es el 2 en decimal y que se obtiene al dividir\n");
  printf("al 8 dos veces entre 2: 8/2 y el resultado otra vez entre 2.\n");
  printf("Estas operaciones de recorrer cifras se conocen como Empujes y\n");
  printf("tal como se vio, los empujes sirven para multiplicar o dividir\n");
  printf("un numero de una manera poco convencional.\n\n");

  printf("Ahora te toca a ti:\n");
  printf("Ejercicio 4: Cual es el resultado de empujar al numero 14\n");
  printf("3 posiciones hacia la izquierda?\n");
  printf("Ejercicio 5: Cual es el resultado de empujar al numero 27\n");
  printf("4 posiciones a la derecha?\n\n\n");

  printf("LECCION 5: EXPLORANDO LA LOGICA DE LAS COMPUTADORAS\n\n");
  printf("Existen otro tipo de operaciones que las computadoras pueden\n");
  printf("realizar con los digitos de un numero binario. Estas operaciones\n");
  printf("se llaman Operaciones Logicas Binarias. Se les llama logicas\n");
  printf("porque trabajan con valores de verdadero y falso. Estos valores\n");
  printf("tambien pueden ser representados mediante el 1 (para verdadero)\n");
  printf("y el 0 (para falso).\n");
  printf("La primera de ellas es el Y. Esta operacion tiene la caracteristica\n");
  printf("de que solamente arroja como resultado el valor de verdadero cuando\n");
  printf("trabaja con dos valores que tambien son verdaderos. En binario,\n");
  printf("entonces el resultado solamente es 1 cuando los dos valores que\n");
  printf("utiliza la operacion Y son 1 y 1. Como se realiza esta operacion?\n");
  printf("Supongamos que tenemos el numero 110 y el numero 101, la operacion\n");
  printf("Y compara digito a digito y produce un resultado dependiendo de sus\n");
  printf("valores y comenzando de derecha a izquierda, asi: 110 & 101 arroja/n");
  printf("como resultado: 100. El simbolo de esta operacion es el & (ampersand).\n\n");

  printf("La segunda operacion es el O binario, que se representa con el simbolo\n");
  printf("|, esta operacion arroja falso (es decir 0) solamente cuando ambos\n");
  printf("valores son 0, en los demas casos, basta con que uno de ellos sea 1\n");
  printf("para que obtengamos verdadero (es decir 1). Por ejemplo, si tenemos\n");
  printf("los numeros 1001 y 1100 y realizamos la operacion de O entre ellos:\n");
  printf("1001 | 1100 el resultado es: 1101.\n\n");

  printf("La tercera operacion que analizaremos es la negacion o el NO.\n");
  printf("Se representa con el simbolo: ~.\n");
  printf("Esta operacion significa colocar el valor contrario\n");
  printf("al valor que se tenga. Por ejemplo, para el numero 101, al\n");
  printf("aplicar la negacion, el resultado es: 010. Observa que en esta\n");
  printf("operacion no es necesario tener dos numeros para realizarla y que\n");
  printf("es muy sencilla: cambia los 1s por 0s y los 0s por 1s.\n\n");

  printf("Otra operacion es el llamado O exclusivo, representado por ^.\n");
  printf("Con el O exclusivo, podemos obtener verdadero siempre y cuando\n");
  printf("los valores a comparar sean diferentes, es decir sean 0 y 1.\n");
  printf("Por ejemplo, teniendo los numeros 1010 y 0101, al aplicar el O\n");
  printf("exclusivo obtendremos: 1010 ^ 0101 = 1111 puesto que\n");
  printf("todas sus cifras son diferentes\n\n");

  printf("Ahora te toca a ti:\n");
  printf("Ejercicio 6: Realiza las cuatro operaciones logicas vistas\n");
  printf("en esta leccion con los siguientes numeros y escribe su valor\n");
  printf("en decimal: 11001101011, 1101110111\n\n\n");

  printf("RESPUESTAS A LOS EJERCICIOS\n\n");
  printf("Ejercicio 1: El numero 1256 en binario es 10011101000.\n");
  printf("Ejercicio 2: El numero 1110001 en decimal es 113.\n");
  printf("Ejercicio 3: Las letras H o L a se verian de la siguiente\n");
  printf("manera: 1001000 1101111 1001100 1100001.\n");
  printf("Ejercicio 4: %d\n", (14 << 3));
  printf("Ejercicio 5: %d\n", (27 >> 4));
  printf("Ejercicio 6:\n");
  printf("11001101011 = 1643\n");
  printf("1101110111 = 887\n");

  int a, b;
  a = 1643;
  b = 887;

  printf("%u & %u = %u\n", a, b, (a & b));
  printf("%u | %u = %u\n", a, b, (a | b));
  printf("~%u = %u\n", a, (~a));
  printf("~%u = %u\n", b, (~b));
  printf("%u ^ %u = %u\n", a, b, (a ^ b));

}

Referencias

"Computer." Wikipedia. The Free Encyclopedia. 2011

ASCII Table

Binary Number System.[Online] Available http://www.mathsisfun.com/binary-number-system.html, 2011.

Presentation 9: Binary System. [Online] Available https://sites.google.com/site/childrenandtechnology/presentation-9-binary-system

"Binary numeral system." Wikipedia. The Free Encyclopedia. 2011

2 comentarios:

  1. Algo parecido a lo q estamos viendo en Arqui de Compu...
    cito a mi profe:
    "Para programar en Ensamblador, hay q pensar como un circuito..."
    XD
    bien Mary
    gracias por el aporte..
    ;)

    ResponderEliminar