NOT

Der Operator NOT kehrt bei einem Vergleich innerhalb einer IF…THEN… Anweisung, die Aussage des Vergleichs um. D.h. ein Vergleich, der WAHR ergibt, wird mit dem vorangestellten NOT-Operator UNWAHR (logische Negation).

Außerdem kann mit dem Operator NOT die Boole’sche Operation Negation durchgeführt werden: Die Bits des binär dargestellten Parameterwertes werden umgedreht, also eine ‘0’ zu ‘1’ und eine ‘1’ zu ‘0’ (entspricht dem Einerkomplement des Wertes).
Dabei kann nur der Zahlenbereich von -32768 bis +32767 verwendet werden, ansonsten erscheint die BASIC-Fehlermeldung ?ILLEGAL QUANTITY ERROR. Das liegt daran, dass der BASIC-Interpreter bei Boole’sche Operationen grundsätzlich nur mit vorzeichenbehafteten 16-Bit Integer-Werten rechnet.

Beispiele

Bedingungen und logische Verknüpfungen

IF NOT A=1 AND NOT C=0 THEN PRINT "HALLO"

PRINT wird ausgeführt, wenn die Variable A nicht gleich 1 und die Variable C nicht gleich 0 ist.

IF NOT A$<>"SAMSTAG" THEN PRINT A$

PRINT wird ausgeführt, wenn die Variablen A$ den Text “SAMSTAG” enthält.

Bitoperationen und Einerkomplement

PRINT NOT(2)  (Ergebnis: -3)
PRINT NOT(1)  (Ergebnis: -2)
PRINT NOT(0)  (Ergebnis: -1)
PRINT NOT(-1) (Ergebnis:  0)
PRINT NOT(-2) (Ergebnis:  1)

Nur genau der Wert -1 (entspricht einem “WAHR”) ergibt negiert 0 (entspricht “UNWAHR”).
Andere Werte als 0 werden, z.B. vom IF-Befehl, stets als “WAHR” aufgefasst.

POKE 53265,PEEK(53265) AND NOT 32

Löscht Bit 5 im entsprechenden VIC-Register und deaktiviert damit einen eventuell aktiven Grafikmodus:
Das Register wird mit der Bitmaske 11011111 UND-verknüpft, d.h. wo sich eine ‘0’ befindet, wird das dort befindliche Bit gelöscht, wobei die anderen Bits unberührt bleiben.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert