Come si imposta solo alcuni bit di un byte in C senza influenzare il resto?
Domanda
Di 'Ho un byte come questo 1010XXXX dove i valori X potrebbe essere qualsiasi cosa. Voglio impostare i quattro bit inferiori ad un modello specifico, dire 1100, lasciando i quattro bit superiori inalterati. Come faccio a fare questo il più veloce in C?
Soluzione
È possibile impostare tutti i bit a 0 dal bit-AND con i 4 bit impostato a 0 e tutti gli altri set a 1 (Questo è il complemento dei 4 bit impostati a 1). È quindi possibile bit a bit-o nei bit come si farebbe normalmente.
es
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.
Altri suggerimenti
In generale:
value = (value & ~mask) | (newvalue & mask);
mask
è un valore con tutti i bit da modificare (e solo loro) impostati a 1 - sarebbe 0xf nel tuo caso. newvalue
è un valore che contiene il nuovo stato di quei bit -. tutti gli altri bit sono essenzialmente ignorati
per i quali sono supportati questo lavoro per tutti i tipi di operatori bit a bit.
Usa operatore OR bit a bit | quando si desidera cambiare il bit di un byte da 0 a 1.
Usa bit a bit operatore ed e quando si desidera cambiare il bit di un byte 1-0
Esempio
#include <stdio.h>
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);
}
Forse ci sono modi migliori, non so. Questo vi aiuterà per ora.