Comment vérifier si bitmask contient un bit?
Je n'arrive pas à comprendre l'ensemble de ce concept de masque de bits.
Disons que j'ai un masque:
var bitMask = 8 | 524288;
Je comprendre que c'est comment je pourrais combiner 8
et 524288
et obtenir 524296
.
MAIS, comment dois-je aller dans l'autre sens? Comment puis-je vérifier mon masque de bits, pour voir si elle contient 8
et/ou 524288
?
Pour le rendre un peu plus complexe, disons-le masque de bits que j'ai est 18358536
et j'ai besoin de vérifier si 8
et 524288
sont que le masque de bits. Comment diable allais-je faire?
source d'informationauteur Nicolai | 2013-01-23
Vous devez vous connecter pour publier un commentaire.
bien
va vérifier si le masque de bits contient 8.
plus complexe
peut-être intéressé par enum et plus particulièrement FlagsAttibute.
Je suis sûr que
(A & B)==B
oùA
est le masque de bits etB
est ce que vous voulez de vérification doit faire.Exemple:
Tout d'abord, masques de bits sont pour les opérations sur les bits, pas des entiers. Il est beaucoup plus facile à comprendre lorsque nous traitons avec seulement de 1 et de 0 que plus de nombres complexes.
Ainsi, par exemple:
1000110000010000100001000 = 18358536 en binaire.
0000010000000000000000000 = 524288 en binaire.
0000000000000000000001000 = 8 en binaire.
0000010000000000000001000 = 524296 en binaire.
Avec cela, il est clair que l'entier 8 est une 4e peu du côté droit et pas les autres bits marqué, donc, quand on ajoute 8 à 524288 (20 bits uniquement) nous sommes tout simplement marquage 4ème et 20 bits comme étant vrai. Nous pouvons donc utiliser le même espace mémoire réservé à un nombre entier de tenir plusieurs indicateurs qui définissent des propriétés booléennes.
Comme Alex a déjà expliqué, vous pouvez ensuite vérifier si une option est disponible dans le masque de bits en utilisant au niveau du bit ET de l'exploitant:
si (masque & drapeau) == flag) { //le masque possède un indicateur est défini comme true }
Vous pouvez lire tout à propos de masques de bits dans cet article