EXOR

Aus C64-Wiki
Zur Navigation springenZur Suche springen
EXOR
Syntax: a = EXOR(<z1>,<z2>)
Parameter
z1: Zahl (0..65535)
z2: Zahl (0..65535)
Einordnung
Typ: numerische Funktion
Kontext: Zahlen
Aufgabe: zwei Zahlen bitweise Exklusiv-Oder verknüpfen
Abkürzung: keine (TSB: exO)
Token: $64 $5a (100 90)
Verwandte Befehle
DIV - MOD


Dieser Artikel beschreibt das Simons'-Basic-Schlüsselwort EXOR.

Typ: numerische Funktion
Syntax: a = EXOR(<z1>,<z2>)

Mit dieser numerischen Funktion werden zwei beliebige vorzeichenlose Ganzzahlen (0..65535) bitweise Exklusiv-Oder verknüpft (ein gesetztes Bit in einer Zahl kehrt das entsprechende Bit in der anderen Zahl um).

Beachte:

  • Alle Simons'-Basic- (und auch TSB-)Funktionen arbeiten nicht, wenn sie zweiter Parameter eines POKE-Befehls sind. Die Werte müssen vor ihrer Verwendung bei POKE einer Variablen zugewiesen werden.
  • Die Argumente dürfen dabei als Ganzzahl aufgefasst (implizite Umwandlung mit der INT-Funktion) nur im Bereich von 0 bis 65535 liegen, andernfalls meldet der Interpreter die Fehlermeldung ?ILLEGAL QUANTITY ERROR.


Beispiele[Bearbeiten | Quelltext bearbeiten]

Invertierung[Bearbeiten | Quelltext bearbeiten]

10 INPUT "POSITIVE ZAHL"; Z
20 A = EXOR(Z,255)
30 PRINT "DIE ZAHL" Z "EOR-VERKNUEPFT MIT 255 ERGIBT" A

Welche Zahl ergibt sich bei Umkehrung (Invertierung) der untersten acht Bit einer anderen Zahl?

WAIT-Befehl[Bearbeiten | Quelltext bearbeiten]

Der WAIT-Befehl

100 WAIT ADDRESS,MASK,FLIP

nachprogrammiert:

100 IF (EXOR(PEEK(ADDRESS),FLIP) AND MASK) = 0 GOTO 100

EXOR dient als Funktion zum "Umdrehen" von Bits, hier: Die Bits in FLIP drehen die korrespondierenden Bits der ausgelesenen Speicherstelle um.

Als logischer Operator[Bearbeiten | Quelltext bearbeiten]

EXOR ist als Funktion nicht wirklich ein Operator wie etwa OR, AND und NOT, sondern muss als Funktion (mit Klammern) aufgerufen werden. Das Ergebnis kann mit den sonstigen logischen Operatoren OR und AND üblicherweise weiterverarbeitet werden. Bei NOT ist Vorsicht geboten, denn ein nur ein -1 ("wahr") ergibt via NOT den Wert 0 ("falsch"). Damit muss eine Weiterverwendung etwa mit der Konstruktion (1=EXOR(Ausdruck, Ausdruck)) oder etwas effizienter -EXOR(Ausdruck, Ausdruck) realisiert werden (wenn man davon ausgeht, dass wie im folgenden gezeigt 1 als "wahr" gewertet wird).

10 IF EXOR(ABS(A = B), ABS(C = D) THEN PRINT "ENTWEDER A = B ODER C = D"

Die Aussage "ENTWEDER A <> B ODER C <> D" ist hier gleichwertig.
Da EXOR nicht mit dem logischen Wahr-Wert -1 als Argument direkt arbeiten kann, müssen hier mit Hilfe der ABS-Funktion die Wahrheitswerte auf 0 ("falsch") und 1 ("wahr") abgebildet werden.
Für die IF-Auswertung reicht das Ergebnis 1, da jeder Wert ungleich 0 als "wahr" angesehen wird. Beim NOT-Operator ist wie eingangs erwähnt erst eine Konvertierung auf -1 für "wahr" notwendig.

Weblinks[Bearbeiten | Quelltext bearbeiten]

WP-W11.png Wikipedia: XOR