2009-04-30 5 views
6

Etwas jeder Student im zweiten Jahr in CS sollte beantworten können, aber ich kann meinen Kopf nicht scheinen, um es zu wickeln ...Ersetzen eines Bitbereich

ich eine Reihe von Bits haben, und ich brauche einige ersetzen der Bits mit einem anderen Satz. In einem vereinfachten Beispiel:

10101010 -Original Bit gesetzt

00001111 -mask zeigt Ersatzpositionen

00001100 -neu Bitwerte

10101100 -resulting Bit gesetzt

Weiteres Beispiel:

10101010 -original Bitsatz

00110011 -mask

11111111 -neue Bitwerte

10111011 -resulting Bit

gesetzt

Es ist trivial dies über die Bits durch Iteration zu tun.

Ist es möglich, dies mit boolescher Logik (UND, ODER usw.) zu tun?

Antwort

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

Der "& ~ Maske" Teil sicherstellen, dass diese Bits auf 0, bevor die löschen | Teil.

Der "& Maske" Teil sicherstellen, dass nur richtige Bits in Newbits verwendet werden.

+0

Das hat es, danke. –

0

Die zu ersetzenden Bits aus dem Original ausmaskieren (durch UND-Verknüpfung mit dem NOT der Maske), dann die neuen Bits einfügen (über ODER).

10101010 -Original Bit gesetzt

00001111 -mask Ersatzpositionen

00001100 -neu Bit zeigt Werte

11110000 -negated

10100000 -Original bitset maskiert

10101100 maskieren - Neue Bits werden in

zurückgesetzt

In C (++) Code, es wäre:

out = (in & ~ Maske) | Newbits;

Wenn die newbits Bits außerhalb von dem enthalten, was sie ersetzen sollen, UND sie mit der Maske auch.

1

(NEU und MASKE) ODER (ALTE und NICHT MASKE)

Verwandte Themen