Wie kann man nur bestimmte Bits eines Bytes in C eingestellt, ohne den Rest zu beeinflussen?
Frage
sagen, ich habe ein Byte wie dieser 1010XXXX wo die X-Werte könnten alles sein. Ich mag die unteren vier Bits zu einem bestimmten Muster setzen, sagt 1100, während die oberen vier Bits unbeeinflusst bleibt. Wie würde ich dies tun, die schnellste in C?
Lösung
Sie können alle diese Bits auf 0 durch bitweise AND-Verknüpfung zusammen mit den anderen vier Bits auf 0 gesetzt und alle anderen auf 1 gesetzt (Dies ist die Ergänzung der 4 Bits auf 1 gesetzt). Sie können dann bitweise oder in den Bits wie gewohnt.
dh
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.
Andere Tipps
Generell gilt:
value = (value & ~mask) | (newvalue & mask);
mask
ist ein Wert, mit allen Bits geändert werden (und nur sie) auf 1 gesetzt - es wäre 0xf in Ihrem Fall. newvalue
ist ein Wert, der den neuen Status dieser Bits enthält -. alle anderen Bits im Wesentlichen ignoriert werden
Dies funktioniert für alle Arten, für die Bit-Operatoren werden unterstützt.
Verwenden bitweise Operator oder | wenn Sie das Bit eines Bytes von 0 bis 1 ändern.
Verwenden bitweise Operator und & wenn Sie das Bit eines Bytes ändern 1 bis 0
Beispiel
#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);
}
Vielleicht gibt es bessere Möglichkeiten, ich weiß nicht. Dies wird Ihnen jetzt helfen.