//Estudiantes: Juan Pablo Montañez, Nicole Dayana Muñoz
unsigned char test;
void setup() {
// NO MODIFICAR este código!
Serial.begin(115200);
presentacion();
}
void loop() {
// Ejemplo de salida del primer punto
Serial.println("Ejemplo de salida esperada punto 1:");
test = par(11);
if(test == 0) Serial.println("El valor es impar");
if(test == 1) Serial.println("El valor es par");
test = par(4);
if(test == 0) Serial.println("El valor es impar");
if(test == 1) Serial.println("El valor es par");
// Ejemplo de salida del segundo punto
Serial.println("Ejemplo de salida esperada punto 2:");
test = mul_9(2);
Serial.print("Salida calculada = "); Serial.print(test, BIN);
if(test == 18){
Serial.println(" correcta!!");
} else {
Serial.println(" incorrecta!!");
}
// Ejemplo de salida del tercer punto
Serial.println("Ejemplo de salida esperada punto 3:");
test = frankie(0b10100110, 0b00001111);
Serial.print("Salida calculada = "); Serial.print(test, BIN);
if(test == 0b010101111){
Serial.println(" correcta!!");
} else {
Serial.println(" incorrecta!!");
}
// Ejemplo de salida del cuarto punto
Serial.println("Ejemplo de salida esperada punto 4:");
test = swapBits(0b00100111, 0, 3);
Serial.print("Salida calculada = "); Serial.print(test, BIN);
if(test == 0b00101110){
Serial.println(" correcta!!");
} else {
Serial.println(" incorrecta!!");
}
// Ejemplo de salida del quinto punto
Serial.println("Ejemplo de salida esperada punto 5:");
test = bitsIguales(0b00100101, 0b11100011, 5);
Serial.print("Salida calculada = "); Serial.print(test, BIN);
if(test == 1){
Serial.println(" correcta!!");
} else {
Serial.println(" incorrecta!!");
}
//Punto extra
Serial.println("Ejemplo de salida esperada punto extra:");
test = intercambiar(25,82);
while(1);
}
/*
Punto 1.
Diseñar una función que identifique si un numero es par o impar
sin usar condicionales IF.
Entradas a la función:
valor: entero con signo
Salidas de la función:
retorna 1- el valor de entrada es par
retorna 0- el valor de entrada es impar
*/
unsigned char par(int valor){
return (valor&1) == 0 ? 1:0; // <----------- Cambie este valor de salida para que la funcion opere correctamente
}
/*
Punto 2.
Diseñar una función que calcule el producto de un valor por 9
con solo dos (2) operaciones.
(No puede usarse la multiplicación, solo operaciones lógicas o suma convencional)
Entradas a la función:
valor: char sin signo
Salidas de la función:
retorna el valor multiplicado por 9
*/
unsigned char mul_9(unsigned char valor){
unsigned char resultado = valor << 3;
resultado += valor;
return resultado; // <----------- Cambie este valor de salida para que la funcion opere correctamente
}
/*
Punto 3.
Diseñar una función que toma dos numeros de 8 bits y crea uno nuevo con
las mitades de cada una de las entradas.
Entradas a la función:
valorA: char sin signo
valorB: char sin signo
Salidas de la función:
retorna un valor cuyo nibble más significativo es el nibble menos significativo de valorA
y el nibble menos significativo de la salida es el nibble más significativo de valorB
*/
unsigned char frankie(unsigned char valorA, unsigned char valorB){
unsigned char nibbleMSB_A = (valorA >> 4) & 0x0F;
unsigned char nibbleLSB_B = valorB & 0x0F;
unsigned char resultado = (nibbleMSB_A << 4) | nibbleLSB_B;
return resultado; // <----------- Cambie este valor de salida para que la funcion opere correctamente
}
/*
Punto 4.
Diseñar una función que intercambie dos bits de un numero de 8 bits
Entradas a la función:
valor: char sin signo
numeroBit1: primera posicion de bit que se intercambiara
numeroBit2: segunda posicion de bit que se intercambiara
Salidas de la función:
retorna el valor con los bits intercambiados
*/
unsigned char swapBits(unsigned char valor, char numeroBit1, char numeroBit2){
unsigned char bit1 = (valor >> numeroBit1) & 1;
unsigned char bit2 = (valor >> numeroBit2) & 1;
valor ^= (1 << numeroBit1);
valor ^= (1 << numeroBit2);
return valor; // <----------- Cambie este valor de salida para que la funcion opere correctamente
}
/*
Punto 5.
Diseñar una función que indique si un bit especifico es igual en dos numeros distintos
Entradas a la función:
valorA: char sin signo
valorB: char sin signo
numeroBit: el numero de bit que se desea comparar
Salidas de la función:
retorna 1 si los bits son iguales
retorna 0 si los bits son distintos
*/
unsigned char bitsIguales(unsigned char valorA, unsigned char valorB, char numeroBit){
unsigned char bitA = (valorA >> numeroBit) & 1;
unsigned char bitB = (valorB >> numeroBit) & 1;
return (bitA == bitB) ? 1 : 0; // <----------- Cambie este valor de salida para que la funcion opere correctamente
}
/*
Punto extra.
Diseñar una función que intercambie el valor de dos variables
sin usar ninguna otra variable y empleando la función XOR
Entradas a la función:
valorA: char sin signo
valorB: char sin signo
Salidas de la función:
presenta el valor de las variables intercambiadas
*/
unsigned char intercambiar(unsigned char valorA, unsigned char valorB){
// NO MODIFICAR este código!
String a = "el valor de la variable A es: " + String(valorA);
String b = "el valor de la variable B es: " + String(valorB);
Serial.println(a);
Serial.println(b);
// Escriba su código a partir de este punto!
valorA = valorA ^ valorB;
valorB = valorA ^ valorB;
valorA = valorA ^ valorB;
// NO MODIFICAR este código!
a = "el valor de la variable A es: " + String(valorA);
b = "el valor de la variable B es: " + String(valorB);
Serial.println(a);Serial.println(b);
}
// -----------------------------------------------------------------------------------------
// NO ALTERAR NINGUNA PARTE DE ESTE CODIGO!!
// -----------------------------------------------------------------------------------------
void presentacion(){
String a = "Actividad de Bitwising\n\n";
a += "Escribir el codigo necesario para que cada funcion haga la tarea que se define en cada\n";
a += "comentario encabezando cada una de las funciones presentadas\n\n";
a += "En la funcion loop encuentra pruebas del uso de cada funcion como guia para prueba de cada funcion";
Serial.println(a);
}