Sostituzione di un intervallo di bit
-
03-07-2019 - |
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.)?
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.