Comment définir ou effacer les 3 premiers bits en utilisant des opérations au niveau du bit?
Permet de dire que j'ai un certain nombre, comme 0x448
. En binaire, c'est 0100 0100 1000
.
Comment puis-je configurer les bits 1, 2 et 3 pour tous 0 ou tous les 1 à l'aide de bit-wise opérations? Quand je dis que les trois premiers, je compte le plus à droite un peu comme le bit zéro.
Ainsi, par exemple
De Bits à 1:
b12 b0
0100 0100 1110
^^^
Bits à 0:
b12 b0
0100 0100 0000
^^^
Je devine que l'ensemble du 1 du I de l'utilisation de bit-wise OU avec un masque de 14 (0x000e)? Mais si c'est le cas, comment dois-je faire quelque chose de similaire pour la compensation de l'bits?
Connexes:
- Comment avez-vous défini, clair et bascule d'un seul bit dans C? (syntaxe varie, mais les opérations sont les mêmes)
source d'informationauteur Mithrax
Vous devez vous connecter pour publier un commentaire.
Vous avez la configuration de bits corrects:
OR
avec le masque de bits que vous souhaitez définir.Peu de compensation bits est très similaire:
AND
avec ceux-complément de l'bits que vous souhaitez effacé.Exemple: Mot de
0x0448
.Paramètres les bits 1, 2 et 3 seraient
Word OR 0x000e
:De compensation les bits 1, 2 et 3 seraient
Word AND 0xfff1
:L'élaboration de celles-complément, ET le modèle de la compensation est la logique de ne PAS le motif OU pour le réglage (chaque bit reveresed):
de sorte que vous pouvez utiliser votre langue préférée N'opération au lieu d'avoir à déterminer les deux valeurs.
En supposant que vous avez un masque m avec les bits mis à 1 pour tous les bits que vous souhaitez définir ou effacer, et 0 sinon:
Si vous êtes uniquement intéressé par un bit, en position p (commençant à 0), le masque est facile à exprimer m = 1 << p
Noter que je suis en utilisant C-les conventions de style, où:
OU avec 1 est toujours vrai; ET avec 0 est toujours faux. 🙂
En supposant que votre OU 0x14 est correcte, la compensation serait:
ET (PAS 0x14)
pour effacer les bits d'utilisation ET avec 0x440
Permet assurez-vous que les bits sont numérotés à partir de 0 de départ sur le côté droit ou le bit le moins significatif et en allant vers la gauche. Ensuite, observer ceci:
1 <
La dernière étape produit un masque pour effacer les bits de la plus significative à p inclusive. Vous pouvez l'inverser avec tilda pour effacer l'autre moitié. Espérons que cette aide.