2010-12-14 9 views

Antwort

11

Sie können alle diese Bits auf 0 setzen, indem Sie bitweise die 4 Bits auf 0 und alle anderen auf 1 setzen (Dies ist das Komplement der 4 Bits, die auf 1 gesetzt sind). Sie können dann bitweise oder in den Bits wie gewohnt arbeiten.

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. 
33

Allgemein gilt:

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

mask ist ein Wert, mit allen Bits geändert werden (und nur sie) auf 1 gesetzt - es ist in Ihrem Fall 0xf würde. newvalue ist ein Wert, der den neuen Status dieser Bits enthält - alle anderen Bits werden im Wesentlichen ignoriert.

Dies funktioniert für alle Typen, für die bitweise Operatoren unterstützt werden.

+0

Können Sie bitte ein konkretes Beispiel geben? Angenommen, ich habe: n = 1024. Ich möchte Bits von Position 3 zu 7 (einschließlich, beginnend von 0 mit dem niedrigstwertigen Bit) zu k = 19 ändern. Das Ergebnis sollte sein: 1176. Wie kann ich es erreichen? Vielen Dank. – dh16

0

Verwenden Sie den bitweisen Operator oder | wenn Sie das Bit eines Bytes von 0 bis 1

Verwenden bitweise Operator und & ändern, wenn Sie das Bit eines Bytes von 1 auf 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); 
} 

ändern möchten Vielleicht gibt es bessere Wege, ich weiß es nicht. Dies wird Ihnen jetzt helfen.