Ein bisschen Reichweite ersetzen
-
03-07-2019 - |
Frage
Etwas im zweiten Jahr in CS sollte in der Lage sein zu antworten, aber ich kann meinen Kopf nicht um ihn herumwickeln ...
Ich habe eine Reihe von Bits und muss einige der Bits durch einen anderen Satz ersetzen. In einem vereinfachten Beispiel:
10101010 -originalbit eingestellt
00001111 -maske mit Ersatzpositionen
00001100 -Neue Bitwerte
10101100 -Resultierender Bit -Set
Ein anderes Beispiel:
10101010 -originalbit eingestellt
00110011 -maske
11111111 -NEW -Bitwerte
10111011 -Resultierender Bit -Set
Es ist trivial, dies zu tun, indem es über die Teile iteriert.
Ist es möglich, mit Booleschen Logik (und, oder usw.) zu tun?
Lösung
result = (original & ~mask) | (newbits & mask)
Der Teil "& ~ mask" versichert diese Bits auf 0 vor dem | Teil.
Der Teil "& mask" stellen sicher, dass nur richtige Bits in Neubits verwendet werden.
Andere Tipps
(Neu und Maske) oder (alt und nicht Maske)
Maskieren Sie die Bits aus dem Original aus (durch Anding mit der Nicht -Maske) und geben Sie die neuen Bits (über oder) ein.
10101010 -originalbit eingestellt
00001111 -maske mit Ersatzpositionen
00001100 -Neue Bitwerte
11110000 -Negierte Maske
10100000 -Original -Bitset maskiert
10101100 -NEW -Bits wieder in
In C (++) Code wäre er:
out = (in & ~ mask) | Neubits;
Wenn die Neubits Teile außerhalb des Ersatzes enthalten, und sie auch mit der Maske.