Frage zu BitXOR

  • Guten Abend zusammen,

    auf der Suche nach einer Möglichkeit eine Combo durch eine Checkbox1 in einem GUI zu aktivieren/deaktivieren bin ich auf folgende Lösung gestoßen:


    Soweit, so gut, die ganze Angelegenheit funktioniert: Combo wird aktiviert sobald Ckechbox1 aktiviert ist.
    Kann mir einer erklären was dieses BitXOR(...) genau macht ?

    Wieso $state2 = BitXOR($state2, $GUI_ENABLE, $GUI_DISABLE) ?

    Ich habe herausgefunden dass bei BitOR die Checkbox nicht mehr von ENABLE zu DISABLE zurück wechselt.
    Die deutsche Doku zum Befehl habe ich gelesen, allerdings hätte ich mit der chinesischen Doku wohl genau so viel verstanden...
    Da ich den Befehl in Zukunft wohl öfters brauchen werde, wäre es von Vorteil das Teil evtl auch zu verstehen.
    Umso simpler die Erklärung, desto besser.

    THX im Vorraus.
    Gruß Filtech

  • Ouu, auf diese Weise BitXOR() zu nutzen kam mir noch nicht in denn Sinn, das merk ich mir mal. :D

    Im Grunde ist es ganz einfach, prüfst du etwas auf ein "exklusives Oder" (so heißt das Dingen), so möchtest du dass entweder das Eine, oder aber das Andere eintrifft. Nicht aber beides zur gleichen Zeit, um's mal als wörtliches Beispiel zu verdeutlichen: "Die Checkbox soll aktiviert, oder deaktiviert sein."

    Die Funktion BitXOR() prüft ob wirklich nur EINES der Zustände zutrifft. Man kann diese Vergleiche auch einmal in eine Liste aufschreiben:
    1 XOR 1 = 0 (Beide Zustände treffen zu... Sollen sie aber nicht)
    1 XOR 0 = 1 (Eines der Zustände trifft zu)
    0 XOR 1 = 1 (Eines der Zustände trifft zu)
    0 XOR 0 = 0 (Kein Zustand trifft zu, ebenfalls inakzeptabel)

    Die BitXOR arbeitet intern mit den Bits, werden 2 oder mehrere Zahlen eingegeben, so wird immer jedes einzelne Bit der eingegeben Parameter überprüft, am Ende kommt dann wieder eine Zahl heraus. In deinem Beispielcode hat der Verfasser dies sich so zu Nutze gemacht, dass ein wechseln der Zustände auf diese Weise möglich ist. Bei 3 oder mehr Parameter wird geprüft, ob die Anzahl der Zustände, welche auf 1 gesetzt sind, ungerade ist. Ist das der Fall, wird eine 1 zurückgegeben an der entsprechenden Bitstelle. Sieht in etwa so aus:

    XOR(1, 1, 1) = 1
    XOR(1, 1, 0) = 0
    XOR(1, 0, 1) = 0
    XOR(1, 0, 0) = 1
    XOR(0, 1, 1) = 0
    XOR(0, 1, 0) = 1
    XOR(0, 0, 1) = 1
    XOR(0, 0, 0) = 0

    Schauen wir uns das jetzt mal für unsere Checkbox für Beide Fälle an. Der Erste Parameter enthält jeweils den Zustand der Checkbox $GUI_ENABLE (1) oder $GUI_DISABLE (0). Die anderen beiden Parameter sind jeweils fest vorgegeben:

    XOR([0], 1, 0) = 1
    XOR([1], 1, 0) = 0

    In den Eckigen Klammern steht jeweils der Zustand, welcher zuvor in der Checkbox enthalten war. Wie ich bereits sagte, wird bei 3 oder mehr Parameter geschaut, wie oft die 1 vorkommt. So kannst du Zustände einfach tauschen. Ist im Grunde Identisch mit folgender If-Abfrage:

    [autoit]

    If $Checkbox = $GUI_ENABLE Then
    $Checkbox = $GUI_DISABLE
    Else
    $Checkbox = $GUI_ENABLE
    EndIf

    [/autoit]