AND

Aus C64-Wiki
Zur Navigation springenZur Suche springen
Begriffsklärung Der Titel dieses Artikels ist mehrdeutig. Weitere Bedeutungen finden sich unter AND (Begriffsklärung).
AND
Syntax: <Ausdruck> AND <Ausdruck>
Parameter
<Ausdruck>: numerischer Ausdruck im Wertbereich von -32768 bis +32767
Einordnung
Typ: Operator
Kontext: Logische Verknüpfung
Aufgabe: Binäre UND-Verknüpfung zweier Zahlen
Abkürzung: aN
Token: $af (175)
Verwandte Befehle
NOT, OR

Anmerkung: Dieser Artikel beschreibt den BASIC-Operator AND unter BASIC V2 des Commodore 64.


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[Bearbeiten | Quelltext bearbeiten]

Logische Verknüpfung[Bearbeiten | Quelltext bearbeiten]

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[Bearbeiten | Quelltext bearbeiten]

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[Bearbeiten | Quelltext bearbeiten]

PRINT 0 AND 0 (Ergebnis: 0; unwahr)
PRINT 1 AND 0 (Ergebnis: 0; unwahr)
PRINT 0 AND 1 (Ergebnis: 0; unwahr)
PRINT 1 AND 1 (Ergebnis: 1; wahr)