6

CSの2年生なら誰でも答えられるはずですが、頭を包み込むことができないようです...

ビットのセットがあり、一部のビットを別のセットに置き換える必要があります。簡単な例では:

10101010 -オリジナルビットセット

00001111 - 交換位置を示すマスク

00001100 - 新しいビット値

10101100 - 結果のビット セット

もう一つの例:

10101010 -オリジナルビットセット

00110011 -マスク

11111111 - 新しいビット値

10111011 - 結果のビット セット

ビット全体を反復することでこれを行うのは簡単です。

ブール論理 (AND、OR など) を使用してこれを行うことは可能ですか?

4

3 に答える 3

10
result = (original & ~mask) | (newbits & mask)

「& ~mask」の部分では、| の前にこれらのビットを 0 にクリアしてください。部。

「& マスク」部分は、newbits の適切なビットのみが使用されるようにします。

于 2009-04-30T16:08:01.713 に答える
1

(NEW および MASK) OR (OLD および NOT MASK)

于 2009-04-30T17:05:14.960 に答える
0

元のビットから置き換えるビットをマスクして(マスクのNOTとANDをとって)、新しいビットを(ORを介して)入れます。

10101010-元のビットセット

00001111-置換位置を示すマスク

00001100-新しいビット値

11110000-否定マスク

10100000-元のビットセットがマスクされています

10101100-新しいビットが元に戻されました


C(++)コードでは、次のようになります。

out =(in&〜mask)| newbits;

newbitsに、置き換えられるはずのビット以外のビットが含まれている場合は、それらもマスクと一緒に使用します。

于 2009-04-30T16:11:57.493 に答える