2010-12-14 9 views

Odpowiedz

11

Wszystkie te bity można ustawić na 0 bitowo-operacyjnie, z 4 bitami ustawionymi na 0 i wszystkimi innymi ustawionymi na 1 (Jest to dopełnienie 4 bitów ustawionych na 1). Możesz wtedy bitowe - lub w bitach, jak normalnie.

tj

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

Ogólnie:

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

mask jest wartością ze wszystkich bitów zostać zmienione (i tylko oni) ustawiony na 1 - byłoby 0xf w Twoim przypadku. newvalue to wartość zawierająca nowy stan tych bitów - wszystkie pozostałe bity są w zasadzie ignorowane.

Będzie to działać dla wszystkich typów, dla których obsługiwane są operatory bitowe.

+0

Czy możesz podać konkretny przykład? Załóżmy, że mam: n = 1024. Chcę zmienić bity z pozycji 3 na 7 (włącznie, zaczynając od 0 z najmniej znaczącym bitem) na k = 19. Wynik powinien wynosić: 1176. Jak mogę to osiągnąć? Dziękuję Ci. – dh16

0

Użyj operatora bitowego lub | gdy chcesz zmienić trochę bajt od 0 do 1.

operatora Zastosowanie mnożenie i & gdy chcemy zmienić trochę bajt od 1 do 0

Przykład

#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); 
} 

Może są lepsze sposoby, nie wiem. To ci pomoże na teraz.

Powiązane problemy