AND
Der BASIC-Operator AND dient zur logischen oder bitweisen UND-Verknüpfung zweier oder mehrerer Ausdrücke, um typischerweise in einer IF…THEN-Konstruktion mehrere Bedingungen logisch miteinander zu verknüpfen. Der THEN-Teil wird dabei nur dann ausgeführt, wenn alle UND-verknüpften Bedingungen bzw. Ausdrücke zutreffen (WAHR sind).
Außerdem können bei der Auswertung von mehr als zwei Ausdrücken auch andere BASIC-Operatoren wie die Operatoren OR oder NOT verwendet werden. Der Operator AND hat dabei eine höhere Bindung als OR, jedoch eine geringere als NOT und dementsprechend müssen mitunter Klammern gesetzt werden, um bei Kombinationen dieser Operatoren die gewünschte Auswertungsreihenfolge zu sichern.
Mit dem Operator AND können auch Zahlen bitweise verknüpft werden (analog zum Assemblerbefehl AND). Dabei kann nur der Zahlenbereich von -32768 bis +32767 verwendet werden, andernfalls erscheint die BASIC-Fehlermeldung ?ILLEGAL QUANTITY ERROR. Die Ursache liegt im BASIC-Interpreter, welcher die Operanden als vorzeichenbehaftete 16-Bit Integer-Zahl auffasst.
Typische Anwendung dieser Booleschen Operation ist die Prüfung bzw. das Ausmaskieren bestimmter Bits. Dabei ist das Ergebnis WAHR und somit 1, wenn das jeweilige Bit beider Operanden ebenfalls 1 ist, sonst jedoch 0 (UNWAHR).
Bei der Auswertung von Bedingungen kommen die Integer-Werte 0 (UNWAHR, alle Bits 0) und -1 (WAHR, alle Bits 1) vor, welche die Vergleichsoperatoren liefern.
Beispiele
Logische Verknüpfung
IF A AND C=0 THEN PRINT "WAHR"
Die Bedingung ist wahr, wenn die Variable A ungleich 0 und die Variable C gleich 0 ist.
IF A$="SAMSTAG" AND B$<>"1984" THEN PRINT "WAHR"
Die Bedingung ist WAHR, wenn die Variable A$ den Text “SAMSTAG” enthält und B$ ungleich dem Text “1984” ist.
Bitverknüpfung bzw. Bitmaskierung
PRINT PEEK(199) AND 64
Bittest: Prüft, ob das Bit 6 der Speicherstelle 199 gesetzt (also WAHR) ist und liefert in diesem Fall den Wert 64 zurück, sonst 0. Die Bitmaske 64 entspricht als Bytewert in der Binärdarstellung 01000000, d.h. bedingt durch diese Maske werden alle Bit-Positionen des PEEK()-Wertes, wo die Maske 0 aufweist, ignoriert (ausgeblendet).
POKE 53265, PEEK(53265) AND 247
Bitoperation: Um gezielt ein Bit (hier Bit 3, mit der Wertigkeit 8) in einem Register auszuschalten (zu löschen bzw. auszumaskieren). Die Bitmaske 247 entspricht binär 11110111.
Für die gegenteilige Bitoperation, um ein Bit zu setzen: siehe Operator OR.
PRINT MID$("0123456789ABCDEF", (PEEK(215) AND 15) + 1, 1)
Das untere (niederwertige) Nibble der Speicherstelle 215 als hexadezimale Ziffer ausgeben. Dazu werden die Bits 0 bis 3 (entspricht der Bitmaske 00001111) heraus gefiltert, also die Bits 4 bis 7 ausgeblendet.
Bitverknüpfungstabelle
PRINT 0 AND 0 (Ergebnis: 0; wahr)
PRINT 1 AND 0 (Ergebnis: 0; unwahr)
PRINT 0 AND 1 (Ergebnis: 0; unwahr)
PRINT 1 AND 1 (Ergebnis: 1; wahr)