Étape 3: Opérations de bits
Ports avec mélangé des entrées et sorties, comme dans le tableau 1, exigent souvent de masquage des opérations qui consistent en un masque et une opération de bits [16]. Le masquage sélectionne les bits individuels ou un sous-ensemble des mèches de port pour les tests. Les opérations de bits permettent les opérations de masquage. De cette façon, les bits d’entrée et de sortie d’un port d’e/s peuvent être séparés et manipulés.
Considérons quelques exemples illustratifs qui seront utilisés avec Blinky deux. Ces exemples écrive et de manipuler les bits d’une variable 8 bits donné par A = rstuvwxy où les lettres r, s, t,..., y sont des éléments avec des valeurs de 0 ou 1. Par exemple, A = 10001000 signifie que r = 1 / v = 1 et le reste sont nuls. Cependant, nous travaillons avec le général et n’avez pas attribué des valeurs de r, s,..., y. Dans la notation de type C, on peut écrire A = « 0brstuvwxy », où 0 indique le compilateur le nombre est binaire ; Cependant, cette notation ne fonctionnera pas dans un programme.
1. au niveau du bit « et » représenté par le signe « & »
Envisager l’A variable 8 bits = rstuvwxy. Supposons que nous voulons vérifier la valeur de bit #1 (pas de bit #0). Est x = 0 ou est x = 1 ? Ainsi, nous définissons masque = 00000010. Notez la 1 valeur dans la position de bit #1 qui correspond à la position de l’embout a variable que nous voulons vérifier. Le mot masque est censé implique que certaines parties seront supprimés du compte et d’autres mis en évidence à l’examen. Maintenant, considérons le bit par bit logique et fonctionnement représentent par « & ». Envisager de
Test = A & masque.
Le tableau 2 indique les bits du masque A et le résultat d’un bit par bit et avis représente la colonne à droite du tableau de bits #0 qui est aussi le moins significatif bit.
Tableau 2: Exemple montrant l’AND au niveau du bit entre deux variables 8 bits
A variable | r | s | t | u | v | w | x | y |
Masque | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
Test = A & masque | 0 | 0 | 0 | 0 | 0 | 0 | x | 0 |
L’opérateur « & » est essentiellement bit par bit multiplication avec les définitions suivantes 1 & 1 = 1, 0 & 1 = 0, 1 & 0 = 0, 0-0 = 0, ce qui peut être considérée comme équivalente à l’algèbre de Boole ou logique non-aristotélicienne avec 1 = True et 0 = False. Les deux premiers des produits (en particulier, 1-1 = 1, 0-1 = 0) montre la raison x & 1 = x dans le tableau 2. Il s’agit de la propriété dont nous avons besoin pour masquage avec le '&' depuis tous les bits dans la « Variable » sera mappé à zéro à l’exception de celles où le masque a un 1. Voir pour plus d’informations sur les opérations de bits de référence [16]. Nous pouvons maintenant demander si « Test » est égal à zéro. Si Test = 0, alors x doit être égal à zéro.
2. opération de bits OR représenté par la ligne verticale ' |'
Ici aussi, mettre la variable A = rstuvwxy où sont,..., y représentent bits avec des valeurs de 0 ou 1. Supposons que cette fois nous veulent s’assurer que les bits 0 # et #4 ont la valeur 1 sans changer les autres à l’a. Autrement dit, nous voulons mettre y = 1 et vous = 1. Pour cela, considérons un masque avec tous les bits de zéro à l’exception de #0 et #4.
Mask2 = 00010001
L’opération de masquage dans ce cas sera l’opération OR bit par bit représentée par la ligne verticale |. L’OR a l’effet suivant sur bits: 1 | 1 = 1, 0 | 1 = 1, 1 | 0 = 1, 0 | 0 = 0. L’OR peut être perçu comme étant semblable à l’OR dans le système logique non-aristotélicienne avec 1 = True et 0 = False. Le tableau 3 montre l’opération OR a | Mask2.
Tableau 3: Exemple montrant l’OR au niveau du bit entre deux nombres de 8 bits
8 bit Variable A | r | s | t | u | v | w | x | y |
Mask2 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 |
A | Mask2 | r | s | t | 1 | v | w | x | 1 |
Les deux définitions d’OR de 1 | 0 = 1, 0 | 0 = 0 (c'est-à-dire, de manière équivalente x | 0 = x) montrent que les bits de masque dans le tableau 3 qui sont nuls ne changent pas les bits correspondants à la Variable (Voir bits r-t, v-x) lors du calcul Variable| Mask2 dans la rangée du bas. Mais l’opération de bits OR produit certainement un 1 dans le bit de résultat où le masque a un 1 comme pour vous et y dans la table.
Enfin alors, si nous affectons le résultat de ' A | Mask2' à un (en utilisant l’opérateur d’assignation de C/C++ de « = »), c'est-à-dire, A = A | Mask2, puis nous parvenir au résultat désiré de bits de réglage 0 et 4 à la valeur on.
3. au niveau du bit négation représentent par manipulation ~
Ici aussi, mettre la variable A = rstuvwxy où sont,..., y représentent bits avec des valeurs de 0 ou 1. Supposons que cette fois nous veulent s’assurer que les bits 0 # et #4 ont la valeur 0 sans changer les autres à l’a. Autrement dit, nous voulons mettre y = 0 et vous = 0. Pour cela, considérons un masque avec tous les bits de zéro à l’exception de #0 et #4.
Mask3 = 00010001
Idéalement, ce qui arrive à être le même que Mask2 dans l’exemple précédent. Peut-être serait-il plus facile de regarder le tableau 4 pour voir ce qui doit arriver.
Tableau 4: Exemple montrant l’AND au niveau du bit entre deux nombres de 8 bits
8 bit Variable | r | s | t | u | v | w | x | y |
Mask3 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 |
~ Mask3 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 |
Variable & ~ Mask3 | r | s | t | 0 | v | w | x | 0 |
Nous savons par les exemples précédents, cet OR peut être utilisé pour changer un peu à un 1, et qu’et peut être utilisé pour changer un peu à un zéro. Il semble que nous devons l’et. Comme indiqué dans le tableau 4, Mask3 a un 1 dans ces endroits que le résultat a un 0. Pour combiner les Mask3 avec l’AND, nous avons une tempête de cerveau et me rends compte que nous avons juste besoin retourner les bits dans Mask3 puis appliquez l’et.
La logique n’est pas ou négation a la définition suivante ~ 0 = 1, ~ 1 = 0. Alors maintenant la mèche se positionne en ~ Mask3 (cf. tableau 4) avec un 0 sont les positions des éléments A qui doit être définie à zéro. Utiliser les résultats pour le premier exemple et le fait que y & 0 = 0 (etc.), nous arrivons à la dernière ligne du tableau 4. Si nous stockons le résultat retour à A variable selon
A = A & ~ Mask3
puis nous avons terminé notre tâche de définissant le bit 0 # et #4 à zéro du nombre original. Ici sont en utilisant le « = » comme une affectation de C/C++.