2009-04-30 22 views
6

qualcosa che ogni studente del secondo anno in CS dovrebbe essere in grado di rispondere, ma io non riesco a avvolgere la mia testa intorno ad esso ...Sostituzione di una gamma po

Ho un insieme di bit, e ho bisogno di sostituire alcuni dei bit con un set diverso. In un esempio semplificato:

10101010 bit -PIAGGIO- impostare

00001111 -mask varie posizioni pezzi

00001100 -new bit Valori

10101100 bit -resulting impostare

altro esempio:

10101010 -set bit originale

00110011 -mask

11111111 bit -new Valori

10111011 -resulting bit impostato

È banale per farlo iterando attraverso i bit.

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

risposta

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

Il "& ~ maschera" parte fare in modo di cancellare i bit a 0 prima della | parte.

La parte "maschera &" assicura che vengano utilizzati solo i bit appropriati nei nuovi bit.

+0

che ha ottenuto, grazie. –

0

Mascherare i bit da sostituire fuori dall'originale (mediante ANDing con il NOT della maschera), quindi inserire i nuovi bit in (tramite OR).

10101010 bit -PIAGGIO- impostato

00001111 -mask mostra posizioni pezzi

00001100 bit -new valori

11110000 -negated mascherare

10100000 bitset -PIAGGIO- mascherato

10101100 -nuovo bit rimesso in


In C (++) Codice, sarebbe:

out = (in & ~ maschera) | newbits;

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

1

(NUOVO e MASCHERA) OR (vecchio e non maschera)