2009-04-30 11 views
6

何かを交換し、私はビットのセットを持っている、と私はいくつかを交換する必要があります異なるセットのビットのうちの1つを選択する。簡単な例で:ビット範囲にCS内の任意年生はお答えすることができるはずですが、私はそれのまわりで私の頭を包むように見えることはできません...</p> <p>

10101010 -Originalビットセット

00001111 -mask示す交換位置

00001100 -newビット

10101100 -resultingビットセット

別の例を値:

10101010 -original bit set

00110011 -mask

11111111 -newビットは

10111011 -resultingビットは、それはビット間で反復することによってこれを行うには些細だ

を設定する値。

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

答えて

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

「&〜マスク」の部分の前に0にこれらのビットをクリアすることを確認してください|部。

「&マスク」の部分は、新しいビットの適切なビットだけが使用されていることを確認します。

+0

これは、ありがたいことです。 –

0

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

10101010 -Originalビット-newビット

11110000は

10101100マスク

10100000 -Originalビット集合をマスク-negated値が交換位置に

00001100を示す

00001111 -maskを設定します - 新しいビットが返されます


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

=(&で〜マスク)| newbits;

newbitsには置換対象外のビットが含まれている場合は、それらもマスクとANDします。

1

(新規およびマスク)OR(旧式およびマスクなし)

関連する問題

 関連する問題