Remplacement d'une plage de bits
-
03-07-2019 - |
Question
Quelque étudiant que ce soit un étudiant de deuxième cycle en CS devrait pouvoir répondre, mais je n'arrive pas à comprendre ce que j'ai à dire ...
J'ai un jeu de bits et je dois remplacer certains de ces bits par un jeu différent. Dans un exemple simplifié:
10101010 - jeu de bits d'origine
00001111 - masque indiquant les postes de remplacement
00001100 - Nouvelles valeurs de bits
Jeu de bits résultant 10101100
Autre exemple:
10101010 - jeu de bits d'origine
00110011 -mask
11111111 -nouvelles valeurs de bits
10111011 jeu de bits résultant
C’est simple de faire cela en parcourant les bits.
Est-il possible de faire cela en utilisant une logique booléenne (AND, OR, etc.)?
La solution
result = (original & ~mask) | (newbits & mask)
Le " & amp; ~ masque " partie assurez-vous d’effacer ces bits à 0 avant le | partie.
Le " & amp; masque " Assurez-vous que seuls les bits appropriés dans les newbits sont utilisés.
Autres conseils
(NOUVEAU et MASQUE) OU (Ancien et non-masque)
Masquez les bits à remplacer de l'original (en utilisant AND avec le NOT du masque), puis insérez les nouveaux bits (via OR).
10101010 - jeu de bits d'origine
00001111 - masque indiquant les postes de remplacement
00001100 - Nouvelles valeurs de bits
masque 11110000 - néant
10100000-bits d'origine masqué
10101100 - nouveaux bits remis dans
Dans le code C (++), ce serait:
out = (in & amp; ~ mask) | newbits;
Si les newbits contiennent des bits en dehors de ce qu'ils sont supposés remplacer, ET les avec le masque également.