Warum bitweise vergleich



  • if ((nFlags & MK_LBUTTON) == MK_LBUTTON)
    if (nFlags == MK_LBUTTON)
    

    Warum nimmt man die erste loesung, welcher Vorteil
    2. geht ja auch



  • wenn mehrere flags gesetzt sind geht 2. eben nicht



  • 2. funktioniert nicht (oder nicht wie gewünscht).
    Jedes bit von nFlags wird als Ja/Nein für einen Wert benutzt. So kannst Werte einfach verknüpfen und abfragen.
    z.B. wenn die linke und rechte Taste gedrückt ist: nFlags = LBUTTON | RBUTTON.
    So hast du nicht 100e von defines wie z.B. L_UND_R_BUTTON, sondern nur die für einzelne Werte (LBUTTON und RBUTTON).



  • Um es anders auszudrücken: die 2. Variante liefert true, wenn mindestens eines der Bits im zu testenden Flagset gesetzt ist (bei der 1. Variante müssen alle gesetzt sein). Welche Variante Sinn macht, kommt auf die Situation an.



  • Hallo,

    Nanyuki schrieb:

    Um es anders auszudrücken: die 2. Variante liefert true, wenn mindestens eines der Bits im zu testenden Flagset gesetzt ist (bei der 1. Variante müssen alle gesetzt sein).

    Das ist entweder verwirrend, oder falsch erklärt, ich hab's nicht verstanden. Deshalb anders:

    Im Falle:

    if (nFlags == MK_LBUTTON)
    

    wird getestet, ob nur das Flag MK_LBUTTON gesetzt ist, und gleichzeitig alle anderen nicht gesetzt sind. (weder mindestens noch alle)

    Mit:

    if ((nFlags & MK_LBUTTON) == MK_LBUTTON)
    

    prüft man, ob unter allen Flags mindestens/auch das eine Flag MK_LBUTTON gesetzt ist, ob die anderen Flags gesetzt oder nicht gesetzt sind, ist egal. (hier passt die Wortwahl "mindestens")

    MfG,

    Probe-Nutzer


Anmelden zum Antworten