Pregunta

Algo que cualquier estudiante de segundo año en CS debería poder responder, pero parece que no puedo envolver mi cabeza alrededor de eso ...

Tengo un conjunto de bits, y necesito reemplazar algunos de los bits con un conjunto diferente. En un ejemplo simplificado:

10101010 - conjunto de bits originales

00001111 - máscara que muestra posiciones de reemplazo

00001100 -nuevos valores de bits

10101100 - conjunto de bits de resultados

Otro ejemplo:

10101010 - conjunto de bits originales

00110011 -mask

11111111 -nuevos valores de bits

10111011 - conjunto de bits de resultados

Es trivial hacerlo haciendo iteraciones en los bits.

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

¿Fue útil?

Solución

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

El " & amp; ~ máscara " parte asegúrese de borrar esos bits a 0 antes de la | parte.

El " & amp; máscara " parte asegúrese de que solo se utilizan los bits adecuados en newbits.

Otros consejos

(NUEVO y MÁSCARA) O (ANTIGUO Y NO MÁSCARA)

Enmascare los bits que se reemplazarán del original (mediante AND con el NO de la máscara), luego coloque los nuevos bits (a través de OR).

10101010 - conjunto de bits originales

00001111 - máscara que muestra posiciones de reemplazo

00001100 -nuevos valores de bits

11110000 - máscara negada

10100000 - conjunto de bits original enmascarado

10101100 -nuevos bits puestos de nuevo


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

out = (en & amp; ~ máscara) | newbits;

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top