Tja, sieht so aus, als bräuchtest du 'nen kleinen Grundkurs in sahen Logik. Also:
Was ist z.B. 10? Klar, das ist 10^1. Aber für den PC ist es
1010
OK, aber wir arbeiten ja grade mit Byte, also 8-Bit:
00001010
Und was ist 5?
00000011
OK, und was ist dan 10 UND 5?
Quelltext
1: 2: 3:
| 10: 00001010 AND 5: 00000011 = 2: 00000010 |
Klar, nur da wo in beiden eine 1 ist, also in 10 UND in 5, da bleibt eine 1. Das wäre das 2. Bit, dann haben wir Dezimal 2.
Das geht auch mit ODER:
Quelltext
1: 2: 3:
| 10: 00001010 OR 5: 00000011 = 11: 00001011 |
Dazu muss ich nix sagen. Dann ist da nch XOR:
Quelltext
1: 2: 3:
| 10: 00001010 XOR 5: 00000011 = 9: 00001001 |
Nur da, wo die Werte unterschiedlich sind, blibt eine 1. So.
Stellen wir uns vor, Schift wäre gedrückt. GetKeyState() liefert 128:
10000000
Beim 2. Druck wäre die Taste sowohl gedrückt als auch getoggelt. Dann gibt's 129:
10000001
So. Fragst du jetzt nach 128 (If GetKeyState() = 128), dann kann es doch sein, dass die Func 'ne 129 zurückliefert. Was nun? Am einfachsten, dur fragst nur das 128er Bit ab:
Quelltext
1: 2: 3:
| 10000001 AND 10000000 = 10000000 |
Wenn also 2GetKeyState() And 128 <> 0" ist, dann ist die Taste down. Egal, ob sie getoggelt ist. Übrigens wundert es mich. Das musst du wissen! Ohne das ist die WinApi kaum zu verstehen. Beispiel: Du fragt den Joystick ab (doofes beispiel). Der gibt dir nene Wert. Jedes Bit = 1 Button. Wie willst du rausfinden, ob die 3. Taste gedrückt ist? Ganz einfach:
Quelltext
1: 2: 3:
| Bitmaske 00001101 AND 00000100 = 00000100 |
Ist ungleich null. Fazit: 3. Feuerknopf ist gedrückt. Oder: Hast du schon mal 'ner WinApi-funktion 'nen Parameter übergeben? Viele sind Flags, also Bitmasken, z.B.
Quelltext
1: 2: 3:
| Flag A = 00000001 Flag B = 00000010 Flag C = 00000100 |
Was macht du? Addieren? Nee, oder? Stell dir das vor:
00000001 + 00000010 + 00000100 = 00000111
Alles klar. Aber:
00000001 + 00000001 + 00000010 + 00000100 = 00001000
Fehler. Warum? 2-Facher Parameter. Und du wunderst dich, warum's nicht funzt. Aber:
00000001 OR 00000001 OR 00000010 OR 00000100 = 00000111
Alles klar! Auch bei OpenGL wichtig.
Na ja, ich hoffe, du hast alles verstanden. Frag halt.