Estás en:   ArielOrtiz.com > Programación avanzada > Práctica 3: Manipulación de bits

Práctica 3: Manipulación de bits

Objetivos

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.

Descripción

Esta actividad puede ser elaborada de manera individual o en parejas.

  1. 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
  2. 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
  3. 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

¿Qué se debe entregar?

Sigue las siguientes indicaciones para entregar tu actividad:

Fecha límite: Jueves, Enero 30.

Evaluación

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.