Tarea 3 de Software de Base

Trimestre 2007 Primavera
Entrega: 26 de junio de 2007 a las 22:00.

Una tarea común al escribir un ensamblador es la de trabajar con máscaras de números binarios. Considere un número binario N de B bits el cual tiene un campo de C bits el cual debe de llenarse con el valor de un número binario M llamado máscara. Por ejemplo si B = 8, C = 5, N = 123 y M = 14 entonces el resultado debe de ser 110 ya que N = 123 escrito con B = 8 bits es 01111011 y M = 14 escrito con C = 5 bits es 01110 por lo que al hacer la máscara se obtiene el número 01101110 que es 110 en decimal (los B-C primeros bits se quedan igual, los C últimos bits se cambian).

Escriba un programa de nombre mascaraZZ.c, mascaraZZ.cpp, mascaraZZ.java o mascaraZZ.f77 que lea de la entrada estándar cuatro números B, C, N, M separados por un espacio. Su programa debe de escribir en la salida estándar el resultado de hacer la máscara.

Como ejemplo, si su programa recibe la entrada 8 5 123 14 entonces deberá producir como salida 110. Puede suponer que 1 <= C <= B <= 64, que 0 <= N < 2B y 0 <= M < 2C. Utilice el tipo unsigned long long int de gcc y g++ o un tipo equivalente en los demás lenguajes. Parte de la tarea es averiguar como se leen y escriben números de ese tipo en su lenguaje favorito.