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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top