Qu'est-ce que si ((a & b) == b) code> signifie dans le bloc de code suivant? if (e.Modifiers == Keys.Shift)
{
lbl.Text += "\n" + "Shift was held down.";
}
8 Réponses :
Un seul ampersand (&) est un peu et ajoute essentiellement les valeurs de (A & B), puis testez l'égalité dans (A & B) == B P>
Donc, dans votre exemple, il s'agit essentiellement si la touche Maj enfoncée (n'importe quelle touche + SHIFT) == Maj. p>
Ça ne les ajoute pas! Il y a une différence énorme b> entre appliquer le bit et l'opérateur et l'ajout.
Oui, je le réalise. J'essayais juste de l'expliquer de manière simple. Désolé d'offenser.
C'est la logique booléenne (& = "Bitwise et"). Vous vérifiez si la variable contient une valeur. C'est comme un filtre.
Exemple: p> dans votre code p> tandis que les touches de contrôle.Shift est contenue dans E.Modificateurs. P> P>
Un seul ampersand fait référence au Bitwise et opérateur . Lorsqu'il est utilisé conjointement avec un énumé qui comporte l'attribut Il pourrait y avoir plus d'une touche de modificateur enfoncée simultanément, c'est pourquoi il est utilisé à la place d'une comparaison directe. P>
Vous pouvez en savoir plus sur Enum Flags ici . Faites défiler jusqu'à la sous-section intitulée «Types de dénombrement comme drapeaux de bits». Vous verrez un échantillon assez similaire à celui-ci. P> [indicateurs] code> sur celui-ci, que les touches code> Enum font, il est utilisé comme vous l'avez montré pour déterminer si l'un des bits de cet énumé est défini ou non. p>
Il utilise une opération bitwise pour interroger si un "drapeau" (bit) est réglé (égal à 1). P>
Probablement mieux à lire sur les opérations ENUMS et BITWise à http: / /msdn.microsoft.com/en-us/library/vstudio/cc138362.aspx p>
Par exemple, vous pourriez avoir les deux em> le quart de travail et la clé CTRL retenue, de sorte que la valeur dans est faux. Le changement est maintenu en panne, mais Ctrl est également maintenu. Si vous voulez savoir si Maj enfoncé est maintenu, quelles que soient les autres clés pourraient être maintenues, vous devez d'abord filtrer toutes les autres clés. Cela se fait facilement en utilisant ceci sera maintenant vrai si la touche Maj enfoncée sera effacée Indépendamment de ce que d'autres clés pourraient être appuyées sur em> et de faux sinon. p> p> & code> est le bit et opérateur. Ce qu'il fait est code> clés code> est un drapeau énum, les valeurs dans clés code> peuvent être une combinaison des bits de plusieurs valeurs. Donc, pour tester une valeur particulière que vous avez d'abord et votre valeur avec la valeur que vous souhaitez tester puis le comparer à la valeur que vous souhaitez tester. E.MOdifier code> sera une combinaison des bits de .Shift code> et keys.ctrl code>. Donc, ceci: p> keys.shift code> sous forme de filtre: p>
C'est la logique et l'opérateur. P>
Il est utilisé lorsque plusieurs drapeaux doivent être réglés dans un exemple entier: P>
a par exemple est 3 qui signifie 00000011 en notation binaire.
b Par exemple est 2 qui signifie 00000010 en notation binaire. P>
Lorsque vous souhaitez vérifier si A a le drapeau (le second bit de droite) que B représente vous pouvez utiliser l'opérateur et l'opérateur: p>
A & B = 00000010 P>
et quand cela équivaut à B (ou est> 0), vous savez que le drapeau est défini. P>
L'opérateur égal peut également être utilisé pour le cas que vous souhaitez vérifier si "Keys.shift" est la seule touche "Modificateur" et qu'aucun autre n'est appuyé. Lorsque vous utilisez le premier code, d'autres touches "modifier" peuvent être appuyées également et si la condition si elle sera toujours vraie. P>
Un seul ampersand (&) effectue un bit-sage et une opération; Un double ampersand (&&) effectue une boolean et une opération.
Un bit-sage et effectue une opération et une opération sur chaque bit des deux arguments (par conséquent, il est appelé "bit-wise"). Ainsi, la sortie d'un bit-sage et d'une opération (ou d'une opération de bit-wise) ne sera pas une valeur booléenne. Voici quelques exemples de bit-sage et d'opérations: p> un booléen et fonctionne sur deux valeurs booléennes et retourne un booléen: p> court-circuit court fort> parce que la première expression Dans votre exemple, le code comparait des bits individuels dans
Un booléen et une opération (&&) peut également être effectué sur deux expressions qui renvoient une valeur booléenne: p> (A <3) code > Évalue à FALSE code>, le résultat ne peut pas être true code> car les deux expressions doivent être évaluées à true code> pour le résultat d'être vrai code>. Pour cette raison, la deuxième expression ne sera même pas évaluée. Ceci s'appelle "court-circuit". Cependant, avec un bit-sage et une opération, les deux expressions doivent être évaluées avant que l'opération soit effectuée. Ainsi, dans la majorité des situations où vous voulez juste déterminer si deux choses sont vraies (Boolean), le booléen et (&&) sera la meilleure option. P> E.MOFIERS CODE> avec des bits individuels dans Keys.shift Code>. Aucun argument ne représente une valeur booléenne et donc l'opération est bit-sage (&) plutôt que boolean (&&). P> p>
Si vous jetez un look Utilisez l'attribut personnalisé FlagSAttribute pour une énumération uniquement si une opération bitwise (et ou, exclusive ou) doit être effectuée sur une valeur numérique. P>
Définir les constantes de dénombrement des pouvoirs de deux, c'est-à-dire 1, 2, 4, 8, etc. Cela signifie que les drapeaux individuels des constantes de dénombrement combinées ne se chevauchent pas. P>
blockQquote> donc juste une hypothèse très simple pour expliquer le Concept: p> donc: p> et la condition: p> Cela signifie: p> si donc le résultat sera le suivant: p> TOUCHES Code> Enum , c'est drapeau Enum a> avec [flagsAttribute] code> attribut.
e.modificateurs peut être une combinaison de plusieurs énormes: p> E.Modificateurs code> ne contient pas clés.shift Code>: P> e.Modifiers & Keys.Shift equals 110 & 001 = 000 (is not Keys.Shift)
Google
bitwise et code>, puis googledrapeau bit code>.duplicata de Qu'est-ce qu'un seul | ou & moyen?