Reemplazo de un rango de bits
-
03-07-2019 - |
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.)?
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.