Domanda

Qualcosa di qualunque secondo anno in CS dovrebbe essere in grado di rispondere, ma non riesco a avvolgerlo con la testa ...

Ho un set di bit e devo sostituire alcuni bit con un set diverso. In un esempio semplificato:

10101010 - set di bit originale

00001111 -mask che mostra le posizioni di sostituzione

00001100 -nuovi valori di bit

10101100 -resulting bit set

Un altro esempio:

10101010 - set di bit originale

00110011 -mask

11111111 -nuovi valori di bit

10111011 -resulting bit set

È banale farlo ripetendo i bit.

È possibile farlo usando la logica booleana (AND, OR, ecc.)?

È stato utile?

Soluzione

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

Il " & amp; ~ Maschera " parte assicurarsi di cancellare quei bit su 0 prima del | parte.

Il " & amp; mask " parte assicurati che vengano utilizzati solo i bit corretti in newbits.

Altri suggerimenti

(NUOVO e MASCHERA) OPPURE (VECCHIO e NON MASCHERA)

Maschera i bit da sostituire dall'originale (da ANDing con il NOT della maschera), quindi inserisci i nuovi bit (tramite OR).

10101010 - set di bit originale

00001111 -mask che mostra le posizioni di sostituzione

00001100 -nuovi valori di bit

11110000 -negated mask

10100000-bitset originale mascherato

10101100 -nuovi bit rimessi in


Nel codice C (++), sarebbe:

out = (in & amp; ~ mask) | newbits;

Se i newbit contengono bit al di fuori di quello che dovrebbero sostituire, e anche quelli con la maschera.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top