miércoles, 30 de noviembre de 2016

Tarea 1 - Binarios

Cómo se realiza una multiplicación en binario?

La multiplicación en binario es el más "fácil".
Como los factores de la multiplicación sólo pueden ser 0 o 1, el producto sólo puede ser 0 o 1 al igual. Es decir que las tablas de multiplicar del cero y del uno son básicas para aprender:
x
0
1
0
0
0
1
0
1
En un computador la multiplicación se realiza mediante sumas repetidas. Eso crea problemas en la programación porque cada suma de dos 1 origina un arrastre, que se resuelven contando el número de 1 y de arrastres en cada columna. Si el número de 1 es par, la suma es un 0 y si es impar, un 1. Luego, para determinar los arrastres a la posición superior, se cuentan las parejas de 1s.

Aquí un ejemplo: 




Para entender mejor aqui se nos pidió hacer una tarea utilizando este mismo calculo y convertirlo en código Arduino para obtener numeros específicos.

int binario[] = {0, 1, 0, 1};
int unidades[] = {0, 0, 0, 0};
int decimal = 0;
// the setup routine runs once when you press reset:
void setup() {
Serial.begin(9600);
// multiplica cada bit por su respectiva potencia en base 2
unidades[3] = binario[3]*1;
unidades[2] = binario[2]*2;
unidades[1] = binario[1]*4;
unidades[0] = binario[0]*8;
//suma los resultados de cada unidad para obtener el decimal
decimal = unidades[3]+unidades[2]+unidades[1]+unidades[0];
}
// the loop routine runs over and over again forever:
void loop() {
Serial.println(decimal);
delay(1000);
}

El código debería funcionar, transformando el 0101 a 5.


Como se puede observer en el el terminal tras correr en código es que aborrecen los 5, es decir que funciono nuestra multiplicación.


La próxima parte de la tarea era escribir un código que transforme un valor hexadecimal (HEX) de un byte a decimal y mostrar el resultado en el monitor serial de Arduino:

Lo difícil de esta tarea era el uso de letras mayúsculas como valores. Para poder trabajar con estos se utilizó el componente "define" de Arduino y se pasaron las letras a sus respectivos valores decimales. Después de se aplicó el mismo procedimiento del ejercicio anterior.


//asigna los valores de las letras en hexadecimal a decimal
#define A 10
#define B 11
#define C 12
#define D 13
#define E 14
#define F 15
//ingresar aqui el valor hexadeximal
int hex[] = {F,7};
int unidades[] = {0, 0};
int decimal = 0;
// the setup routine runs once when you press reset:
void setup() {
Serial.begin(9600);
//multiplica cada espacio por su respectiva potencia de 16
unidades[1] = hex[1]*1;
unidades[0] = hex[0]*16;
//suma los resultados de cada unidad para obtener el decimal
decimal = unidades[1]+unidades[0];
}// the loop routine runs over and over again forever:
void loop() {
Serial.println(decimal);
delay(1000);
}

No hay comentarios.:

Publicar un comentario