Desde C no es posible modificar bits individuales, lo de los campos de bits no es portable entre compiladores por lo que tendrás que usar máscaras como dice durasno.Si apuntas a un short int en teoría te cambiaría los 8 últimos.Para eso puedes practicar con este código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* binario(unsigned short int num)
{
char *numeroBin
= calloc(16,1); char *strReturn
= calloc(16,1); for(int i = 0;num;i++)
{
numeroBin[i]=(num%2)+48;
num/=2;
}
for(int i
= 16 -strlen(numeroBin
);i
!=0;--i
) {
}
strcat(strReturn
,strrev
(numeroBin
)); return strReturn;
}
int main(int argc, char *argv[])
{
short int valor2 = 0;
char *valor =&valor2;
*valor = 0xFF; //Aquí cambiamos la parte baja
*(valor+1)= 0x0F;//Aquí cambiamos la parte alta
printf("%s\n",binario
(valor2
)); return 0;
}
Un ejemplo de como hacer que se active el bit 1 y el 8 de la variable valor con la puerta lógica or.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* binario(unsigned short int num)
{
char *numeroBin
= calloc(16,1); char *strReturn
= calloc(16,1); for(int i = 0;num;i++)
{
numeroBin[i]=(num%2)+48;
num/=2;
}
for(int i
= 16 -strlen(numeroBin
);i
!=0;--i
) {
}
strcat(strReturn
,strrev
(numeroBin
)); return strReturn;
}
int main(int argc, char *argv[])
{
char valor = 0;
valor |= 0x81;//Activamos el primer bit y el último.
printf("Valor: %d\nBinario: %s ", valor
,binario
(valor
); return 0;
}
Deberías echarle un vistazo a esto:
http://www.bitschips.com/infoind/prg_msc.pdf¡Saludos!