EXOR
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]
Wikipedia: XOR |
$ | % | @ | ANGL | ARC | AT | AUTO | BCKGNDS | BFLASH | BLOCK | CALL | CENTRE | CGOTO | CHAR | CHECK | CIRCLE | CMOB | COLD | COLOUR | COPY | CSET | DELAY | DESIGN | DETECT | DIR | DISABLE | DISAPA | DISK | DISPLAY | DIV | DOWN | DRAW | DUMP | DUP | ELSE | END LOOP | END PROC | ENVELOPE | ERRLN | ERRN | EXEC | EXIT | EXOR | FCHR | FCOL | FETCH | FILL | FIND | FLASH | FRAC | GLOBAL | GRAPHICS | HI COL | HIRES | HRDCPY | INKEY | INSERT | INST | INV | JOY | KEY | LEFT | LIN | LINE | LOCAL | LOOP | LOW COL | MEM | MERGE | MMOB | MOB OFF | MOB SET | MOD | MOVE | MULTI | MUSIC | NO ERROR | NRM | OFF | OLD | ON ERROR | ON KEY | OPTION | OUT | PAGE | PAINT | PAUSE | PENX | PENY | PLACE | PLAY | PLOT | POT | PROC | RCOMP | REC | RENUMBER | REPEAT | RESET | RESUME | RETRACE | RIGHT | RLOCMOB | ROT | SCRLD | SCRSV | SECURE | SOUND | TEST | TEXT | TRACE | UNTIL | UP | USE | VOL | WAVE