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!
Usar máscaras para una sola parte del byte
Número de respuestas: 2Re: Usar máscaras para una sola parte del byte
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
Re: Usar máscaras para una sola parte del byte
Es mas complejo de lo que imaginaba entonces, gracias!