14 de noviembre de 2010

Ejercicios con máscaras AND y OR (control)

Ejercicios de repaso:

Con estos ejercicios repasamos el uso de los operadores "AND" y "OR" para modificar el estado de algunos bits. Recuerda que la importancia de estos operaciones radica en poder cambiar el estado de un bit aislado "sin modificar" el estado de los demás.

Teniendo en cuenta que usamos la variable unsigned char mivar...

1. Poner los bits 2 y 5 a "0".

Una variable tipo char almacena un carácter (1 byte), cuando se usa junto al modificador 'unsigned' quiere decir que todos los bits son utilizados como dato. Cuando se usa junto al modificador 'signed', el bit 7 se utiliza como signo y por lo tanto sólo se dispone de 7 bits. En nuestro caso disponemos de 8 bits (b7....b0).

Si deseamos poner un bit a "0", usamos el operador "AND".
Escribe un  "0" en los bits a cancelar y "1" en los demás. La máscara quedará:

valor = valor & 1101 1011;  (observa que se ha puesto "0" en los bits a cancelar)
valor = valor & 0xDB;

2. Poner los bits 1, 3, 7 a "1".

Si deseamos poner a "1" un bit usamos el operador "OR".
Escribe un "1" en los bits que deseamos activar y "0" en los demás. La máscara quedará:

valor = valor | 1000 1010;
valor = valor | 0x8A;

3. Complementar el valor de los bits 4 y 6.

Para complementar usamos el operador XOR.
Escribe un "1" en el bit a complementar y los demás a "0". La máscara quedará por lo tanto:

valor = valor XOR 0101 0000;
valor = valor XOR 0x50;


4. Utilizando la variable valor char, poner a "1" la parte alta del registro y a "0" la parte baja,

La variable valor tipo char contiene 8 bits. La parte alta son los cuatro bits de la izquierda.
Para poner a "1" estos bits utilizamos el operador "OR" con una máscara:

valor = valor OR 1111 0000;
valor = valor OR 0xF0;

Si deseamos poner a "0" la parte baja, utilizamos el operador "AND":

valor = valor AND 11110000;
valor = valor AND 0xF0;

Nota: Un grupo de 4 bits se llama "nibble", leer más en Wikipedia
Importante: Cuando se hace referencia al bit 5, no hay que olvidar contar desde la derecha (cero incluido).

También puedes leer en el blog el artículo "Usar el operador AND"

No hay comentarios: