Nota: 0x11111111 no significa 8 bits todo listo para 1. Es un número hexadecimal de 4 bytes, donde cualquier byte se establece en 0x11.
0xFF es un solo byte (8 bits), donde cualquier bit se pone a 1.
Entonces, para lograr lo que quiere usted podría utilizar algunas macros para aislar los bits que necesita:
#define TOKEN1(x) ((x)>>7)
#define TOKEN2(x) (((x)>>3) & (0xFF>>5))
#define TOKEN3(x) (((x)>>5) & (0xFF>>5))
No lo probé.
Otra idea, que podría ser la de poner en una unión un char y una estructura utilizando campo de bits de caracteres
union {
struct { char a:3; char b:4; char c:3; };
char x;
};
De esta manera puede utilizar x para editar todo el octeto, y A, B y C a el acceso a las fichas individuales ...
Editar: 3 + 4 + 3 = 8.
Si necesita 10 bits que debe utilizar un corto en lugar de un char. Si, en cambio, algunos de esos bits se superponen, la solución que utiliza MACRO probablemente será más fácil: necesitará más de una estructura dentro de la unión para lograr el mismo resultado con la segunda solución ...
... ¿por dónde empezar * qué *? – Flinsch
¿Tarea? No hay nada malo con la tarea, pero las preguntas deben marcarse como tales. Ayuda a la comunidad a mejorar sus respuestas para ser más útil. –
Ahora que estoy hablando de eso ... 3 + 4 + 3! = 8 ... – peoro