2010-12-14 5 views

答えて

11

4ビットを0に設定し、その他すべてを1に設定してビット単位でビットを0に設定できます(これは4ビットの1の補数です)。ビット単位で、またはビット単位で通常どおりに行うことができます。一般的に

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

すなわち

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

maskは1に設定変更するすべてのビットを持つ値(およびそれらだけ)である - それはあなたのケースで0xFのことでしょう。 newvalueは、これらのビットの新しい状態を含む値です。他のすべてのビットは基本的に無視されます。

これは、ビット演算子がサポートされているすべてのタイプで機能します。

+0

具体的な例を挙げてください。私が持っていると仮定します:n = 1024です。ビットを位置3から7まで(0を含む0から最下位ビットまで)からk = 19に変更したいと思います。結果は:1176になるはずです。ありがとうございました。 – dh16

0

ビット演算子または|を使用してください。あなたは0から1までのバイトのビットを変更したいとき

使用ビット単位の演算子と&あなたは1から0までのバイトのビットを変更したいとき

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

多分もっと良い方法があるかもしれない、私は知らない。これは今のところあなたを助けるでしょう。

関連する問題