質問
CSの2年生は答えられるはずですが、頭を包み込むことができないようです...
ビットのセットがあり、一部のビットを別のセットに置き換える必要があります。簡単な例:
10101010-元のビットセット
00001111-置換位置を示すマスク
00001100-新しいビット値
10101100-結果のビットセット
別の例:
10101010-元のビットセット
00110011 -mask
11111111-新しいビット値
10111011-結果のビットセット
ビットを反復処理することでこれを行うのは簡単です。
ブール論理(AND、ORなど)を使用してこれを行うことは可能ですか?
解決
result = (original & ~mask) | (newbits & mask)
"& 〜mask"パートの前に、これらのビットを0にクリアしてくださいパート。
"&マスク"一部は、newbitsの適切なビットのみが使用されていることを確認してください。
他のヒント
(新規およびマスク)または(旧および非マスク)
元のビットから置き換えられるビットをマスクし(マスクのNOTとのAND結合により)、新しいビットを(ORを介して)挿入します。
10101010-元のビットセット
00001111-置換位置を示すマスク
00001100-新しいビット値
11110000-ネゲートマスク
10100000-マスクされた元のビットセット
10101100-新しいビットを戻す
C(++)コードでは、次のようになります。
out =(in&〜mask)| newbits;
newbitsに、置き換えられるはずのビットが含まれていない場合は、マスクも使用してください。
所属していません StackOverflow