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.)?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top