Mi pregunta original fue:
Tengo datos de 8 bits con solo 3 bits utilizados, por ejemplo:
0110 0001
Donde 0 indica el bit no utilizado que siempre se establece en 0 y 1 indica bits que cambian.
Quiero convertir este 0110 0001 8 bits a 3 bits que indican este 3 bits utilizados.
Por ejemplo
0110 0001 - > 111
0010 0001 - > 011
0000 0000 - > 000
0100 0001 - > 101
¿Cómo puedo hacer eso con operaciones mínimas?
Tuve esta respuesta:
a = 0110 0001;
data = ((a >> 4) & 6) | (a & 1)
Pero antes de esta respuesta utilicé este método:
a = 0110 0001;
if(a&0x01)
data = data + 1;
if(a&0x20)
data = data + 2;
if(a&0x40)
data = data + 4;
Quiero preguntar cuál es más eficiente para una MCU y requiere menos ciclo de reloj para realizarla. (Sé que eso depende de MCU, pero lo pregunto de manera general)