Usar máscaras para una sola parte del byte

Usar máscaras para una sola parte del byte

de Yonathan Ygnacio Pla Gonzalez -
Número de respuestas: 2

Como puedo usar máscaras para una sola parte del byte? Mas específico en el medio, por ejemplo tengo el byte b7 b6 b5 b4 b3 b2 b1 b0 y quiero obtener el b5 b4 b3. Pero también para el caso que quiera b3 b2 solamente, o sea, hacerlo de una forma genérica, como seria? Porque las una máscara tengo que tener previamente definido que es lo que quiero para aplicarlo no? Gracias!

En respuesta a Yonathan Ygnacio Pla Gonzalez

Re: Usar máscaras para una sola parte del byte

de Federico Rivero -

Estimado:

Las operaciones & y | de c comparan tiras de bits de como mìnimo 1 byte. Por esta razón, no hay una operación que haga únicamente eso que pedís.

De todos modos, hay formas de resolverlo. Por ejemplo, en tu caso, que querés obtener los bits b5 b4 y b3, harías un & con la máscara con la tira  0x38 = 00111000b  (dando 00b5b4b3000 como resultado), y luego deberías correr a la derecha el resultado (con el operador de shift a la derecha: >>, tres lugares)

char b5b4b3 = (byte_orig & 0x38) >> 3;

Releyendo tu pregunta, creo que la respuesta es que en general primero tenés que saber qué bits querés obtener y luego pensar la máscara correspondiente. Si querés algo más genérico, deberías hacerlo con una función (que por ejemplo reciba el rango de bits que querés obtener, genere la máscara y aplique el shift). Ahora que lo pienso, es un buen ejercicio de práctico :D

Saludos!

        Federico