私がこの1010XXXXのようなバイトを持っているとしましょう。X値は何でもかまいません。下位4ビットを特定のパターン(1100など)に設定し、上位4ビットは影響を受けないようにします。これをCで最速にするにはどうすればよいですか?
これらのすべてのビットを0に設定するには、4ビットを0に設定し、その他すべてを1に設定します(これは、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.
一般に:
value = (value & ~mask) | (newvalue & mask);
mask
は、変更されるすべてのビット(およびそれらのみ)が1に設定された値です。この場合、0xfになります。 newvalue
は、これらのビットの新しい状態を含む値です。他のすべてのビットは基本的に無視されます。
これは、ビット演算子がサポートされているすべての型で機能します。
ビット演算子または|を使用しますバイトのビットを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);
}
多分もっと良い方法があるでしょう、私にはわかりません。これは今のところあなたを助けます。