2009-04-30 11 views
6

algo que cualquier estudiante de segundo año en el CS debe ser capaz de responder, pero me parece que no puede envolver mi cabeza alrededor de ella ...Sustitución de un rango de bits

que tienen un conjunto de bits, y tengo que sustituir alguna de los bits con un conjunto diferente. En un ejemplo simplificado:

10101010 bit -Original establecer

00001111 -mask posiciones de recambio que muestran

00001100 -New poco valora

10101100 bit -resultante establecer

Otro ejemplo:

10101010 -original bit set

00110011 -mask

11111111 poco -nuevo valora

10111011 poco -producto establece

Es trivial para hacer esto mediante la iteración a través de los bits.

¿Es posible hacer esto usando lógica booleana (Y, O, etc.)?

Respuesta

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

El "& ~ máscara" parte asegúrese de borrar los bits a 0 antes del | parte.

La pieza "& mask" se asegura de que solo se utilicen bits adecuados en newbits.

+0

Eso lo tiene, gracias. –

0

Enmascare los bits que se van a sustituir fuera del original (por ANDing con NOT de la máscara), luego coloque los nuevos bits (a través de O).

10101010 bit -Original conjunto

00001111 -mask muestra posiciones de recambio

00001100 bit -New valores

11110000 -negated enmascarar

10100000 bitset -Original enmascarado

10101100 -nuevos bits devueltos en


En C (++) código, sería:

a cabo = (en & ~ máscara) | newbits;

Si los newbits contienen bits fuera de lo que se supone que deben reemplazar, Y con la máscara también.

1

(NUEVO y máscara) O (OLD y no enmascara)

Cuestiones relacionadas