2010-10-06 13 views

Antwort

12

Dasselbe Wort, AND, wird auch für logische und verwendet. Aber die zwei Eingabewerte zu werden empfohlen, wohlgeformte Flaggen zu sein; true und false werden durch zwei Werte dargestellt, Bits alle gesetzt (-1) und Bits alle nicht gesetzt (0). Andere Werte als diese können (wie in C) als wahr gelten, können jedoch zu subtilen Fehlern führen.

Alle Vergleichsoperatoren geben wohlgeformte Flags zurück, aber zum Beispiel - nicht. Folgendes wird zu false (0) ausgewertet.

7 5 - 7 3 - AND 

AND erhält Bitmustern 100 und 010. Das Ergebnis ist 0 (wenn es durch die bitweise und tut). Referenzen

:

  1. Bit Manipulations in Forth, Teil Lernen Forth Stück für Stück.
  2. Abschnitt "Eine kleine Logik" in Chapter 4 von Beginnend.
+1

Ich weiß nicht genug, um zu sagen, ob dies gültig ist, aber die Bitmuster 0xFF00 und 0x00FF haben bitweise und 0x0000 aber logisch und True (da beide ungleich Null sind) – SingleNegationElimination

+0

@TokenMacGuy: Danke! Es war ein solches Beispiel, nach dem ich gesucht habe. Ich habe die Antwort aktualisiert. –

0

Das Forth AND ist ein Bit-weise UND auf 64-Bit-Werte. Natürlich arbeiten diese Operatoren mit Masken gut. Wenn diese Werte jedoch alle Einsen oder alle Nullen sind, ist das Ergebnis auch alles Einsen oder alles Nullen (das gleiche gilt für bitweise OR- und XOR-INVERT-Operationen).

Ein boolesches Flag in Forth sind alle Einsen oder alle Nullen. Wenn also die Eingaben boolesche Flags sind, ist die Ausgabe von AND ODER XOR INVERT ebenfalls boolesch, und diese Operatoren können somit zur Darstellung boolescher Operatoren verwendet werden. Bitte beachten Sie, dass Operationen wie = < 0 = ein boolesches Flag ergeben.

Die Situation ist die gleiche mit +. Da Ganzzahlen als Zweierkomplement definiert sind, kann + (plus) sowohl für vorzeichenbehaftete als auch vorzeichenlose Zahlen verwendet werden. Es gibt also keinen separaten Namen für die vorzeichenlose Addition von ganzen Zahlen.