de 12de bit die komt uit de 2de byte
Klinkt als "het 12de bit van een integer, uit het tweede byte van die integer".
Een byte heeft 8 bits. Meestal genummerd van 0 t/m 7. Dus die heeft nooit een 12de bit.
Een long int heeft wel 32 bits. Dus daar kun je dan wel de gevraagde bits uit halen. Het eerste byte heeft dan bits nr 0 t/m 7, het tweede byte heeft de bits 8 t/m 15 enz.
Als het 12de bit gegeven is dan is de vraag hoe. Kan zijn als getal. Dat kun je dan omrekenen naar een bitpositie door een shift operatie:
code:
int BitNr = 12;
long int Bitmap;
Bitmap |= 1 << (BitNr - 1);
Maar let op, want bits worden genummerd van 0 t/m 31. Het eerste bit is namelijk bit nummer 0, het tweede bit is bit nr 1 enz. Dus je moet wel weten wat die 12 precies betekent. Als je nummert van 1 t/m 32, dan moet je bij het schuiven 1 aftrekken. Als je nummert van 0 t/m 31 dan moet dat niet.
Kan ook zijn dat de bit wordt gegeven als integer waarde.
Die kun je dan terugrekenen door bits te tellen:
code:
long int BitValue = 1 << (12 - 1);
for (int BitNr = 0; BitNr <32; BitNr += 1)
{ if(BitValue & (1 << BitNr) )
{ printf("Bit nr %d is hoog\n", (BitNr + 1) );
}
}
Ook hier weer (12 - 1) en (BitNr + 1) omdat Bit 0 het eerste bit is.