Comment définir seulement certains bits d’un octet en C sans affecter le rest?

Disons que j’ai un octet comme ce 1010XXXX où les valeurs X pourraient être n’importe quoi. Je souhaite définir les quatre bits inférieurs sur un motif spécifique, par exemple 1100, sans affecter les quatre bits supérieurs. Comment ferais-je cela le plus rapide en C?

    Vous pouvez définir tous ces bits sur 0 en procédant au niveau des bits avec les 4 bits définis sur 0 et tous les autres sur 1 (le complément des 4 bits est défini sur 1). Vous pouvez ensuite utiliser les bits comme vous le feriez normalement.

    c’est à dire

    val &= ~0xf; // Clear lower 4 bits. Note: ~0xf == 0xfffffff0 val |= lower4Bits & 0xf; // Worth anding with the 4 bits set to 1 to make sure no // other bits are set. 

    En général:

     value = (value & ~mask) | (newvalue & mask); 

    mask est une valeur avec tous les bits à changer (et seulement eux) mis à 1 – ce serait 0xf dans votre cas. newvalue est une valeur qui contient le nouvel état de ces bits – tous les autres bits sont essentiellement ignorés.

    Cela fonctionnera pour tous les types pour lesquels les opérateurs au niveau du bit sont pris en charge.

    Utiliser l’opérateur au niveau du bit ou | quand vous voulez changer le bit d’un octet de 0 à 1.

    Utilisez l’opérateur bitwise et & lorsque vous voulez changer le bit d’un octet de 1 à 0

    Exemple

     #include  int byte; int chb; int main() { // Change bit 2 of byte from 0 to 1 byte = 0b10101010; chb = 0b00000100; //0 to 1 changer byte printf("%d\n",byte); // display current status of byte byte = byte | chb; // perform 0 to 1 single bit changing operation printf("%d\n",byte); // Change bit 2 of byte back from 1 to 0 chb = 0b11111011; //1 to 0 changer byte byte = byte & chb; // perform 1 to 0 single bit changing operation printf("%d\n",byte); } 

    Peut-être y a-t-il de meilleurs moyens, je ne sais pas. Cela vous aidera pour le moment.