Durante esta actividad, los alumnos serán capaces de:
Esta actividad promueve las siguientes habilidades, valores y actitudes: análisis y síntesis, capacidad para resolver problemas, creatividad, y uso eficiente de la informática y las telecomunicaciones.
Esta actividad puede ser elaborada de manera individual o en parejas.
Escribe la función mul
con el siguiente prototipo de función:
unsigned mul(unsigned a, unsigned b);
Dicha función debe implementar la operación de multiplicación utilizando los operadores para manipulación de bits y el operador de suma. Por ejemplo:
200 × 100 =
200 × (1×26 + 1×25 + 0×24 + 0×23 + 1×22 + 0×21 + 0×20) =
200×26 + 200×25 + 200×22
Y recuerda que a << b es equivalente a: a × 2b.
Coloca tu código en un archivo llamado mul.c
y pruébalo con la siguiente función main
:
int main(void) { printf("%u\n", mul(0, 0)); printf("%u\n", mul(1, 42)); printf("%u\n", mul(0, 42)); printf("%u\n", mul(255, 255)); printf("%u\n", mul(12345, 54321)); printf("%u\n", mul(65535, 65535)); printf("%u\n", mul(65536, 65536)); return 0; }
La salida esperada es:
0 42 0 65025 670592745 4294836225 0
Usando operadores de manipulación de bits, escribe la función rol
con el siguiente prototipo de función:
unsigned rol(unsigned x, unsigned n)
Dicha función debe implementar la operación de rotación izquierda de x un total de n bits. Solo se deben considerar los 5 bits menos significativos de n.
Coloca tu código en un archivo llamado rol.c
y pruébalo con la siguiente función main
:
int main(void) { printf("0x%08X\n", rol(0x80000002, 2)); printf("0x%08X\n", rol(0xECAFEBAB, 36)); printf("0x%08X\n", rol(-5, 29)); printf("0x%08X\n", rol(0xDEADBEAF, -48)); printf("0x%08X\n", rol(0x587D6758, 25)); return 0; }
La salida esperada es:
0x0000000A 0xCAFEBABE 0x7FFFFFFF 0xBEAFDEAD 0xB0B0FACE
Escribe la función palindrobits
con el siguiente prototipo de función:
int palindrobits(unsigned x)
Usando operadores de manipulación de bits, la función debe devolver 1 (true) si la representación en binario de x es un palíndromo, o 0 (false) en caso contrario. Un palíndromo es una palabra que se lee igual hacia adelante que hacia atrás.
Por ejemplo, el 5 es un palíndromo en binario, así como el 3,568,539:
5dec = 101bin
3568539dec = 1101100111001110011011bin
Sin embargo el 6 y el 2,000,000,000 no son palíndromos en binario:
6dec = 110bin
2000000000dec = 1110111001101011001010000000000bin
Coloca tu código en un archivo llamado palindrobits.c
y pruébalo con la siguiente función main
:
int main(void) { printf("%d\n", palindrobits(5)); printf("%d\n", palindrobits(6)); printf("%d\n", palindrobits(1397)); printf("%d\n", palindrobits(1398)); printf("%d\n", palindrobits(3568539)); printf("%d\n", palindrobits(2000000000)); return 0; }
La salida esperada es:
1 0 1 0 1 0
Sigue las siguientes indicaciones para entregar tu actividad:
Agrega en comentarios al inicio de todos los archivos fuente los nombres y matrículas de los autores. Por ejemplo:
/*-------------------------------------------------------------------
* Práctica 3: Manipulación de bits
* Fecha: 30-Ene-2014
* Autores:
* 1166611 Pepper Pots
* 1160611 Anthony Stark
*-------------------------------------------------------------------*/
practica3.tgz
con los tres archivos fuente. Esto lo puedes hacer con el siguiente comando desde la terminal:
tar czf practica3.tgz mul.c rol.c palindrobits.c
Fecha límite: Jueves, Enero 30.
Esta actividad será evaluada usando los siguientes criterios:
100 | La actividad cumple con todos los requerimientos. |
---|---|
-10 | No se incluyó en comentario los datos de los autores. |
10 | Los programas fuentes producen errores al momento de compilarlos. |
50-90 | Los programas tiene algunos errores a tiempo de ejecución. |
DA | Los programas son un plagio. |