FreeBasic: Logische Operationen
Aus Wikibooks
Inhaltsverzeichnis |
[Bearbeiten] Einleitung
Binärliterale werden so eingegeben:
&b0110
Die Ausgabe als Bitmuster geht mit bin().
Als Beispielprogramm:
a=&b11101111 print a print bin(a) sleep
[Bearbeiten] Logische Operatoren
[Bearbeiten] AND OR XOR
Beispielprogramm:
Dim a as byte Dim b as byte a=&B1010 b=&B1100 print bin(a AND b) print bin(a OR b) print bin(a XOR b) sleep
[Bearbeiten] AND
AND setzt das Bit genau dann auf 1/positiv, wenn die beiden Bits in den Vergleichszahlen gleich 1/positiv sind. 0 und 0 ergeben dabei also 0.
&b1010 <- Erste Zahl &b1100 <- Zweite Zahl &b1000 <- Ergebnis einer AND-Operation.
[Bearbeiten] OR
OR setzt das Bit genau dann auf 1/positiv, wenn mindestens eines der beiden Bits in den Vergleichszahlen positiv/1 ist.
&b1010 <- Erste Zahl &b1100 <- Zweite Zahl &b1110 <- Ergebnis einer OR-Operation.
[Bearbeiten] XOR
XOR setzt das Bit genau dann auf 1/positiv, wenn exakt eines der beiden Bits positiv/1 ist.
&b1010 <- Erste Zahl &b1100 <- Zweite Zahl &b0110 <- Ergebnis einer XOR-Operation.
[Bearbeiten] NOT
Invertiert einfach alle Bits, aus 0 wird also 1 und aus 1 wird 0.
Beispiel Programm: a=&B0000 print bin(Not a) a=&B1111 print bin(Not a) sleep
[Bearbeiten] IMP
IMP ist die Abkürzung für Implikation.
Die Operation wird praktisch nicht verwendet.
Beispielprogramm:
dim a as byte dim b as byte dim c as byte a=&B1010 b=&B1100 c= a IMP b print a;" ";bin(a) print b;" ";bin(b) print print c;" ";bin(c) sleep
Die Implikation entspricht Not(a and Not(b)) oder auch Not(a) or b.
Beweis:
dim a as byte dim b as byte a=&B1010 b=&B1100 print a IMP b print Not(a and Not(b)) print Not(a) or b sleep
[Bearbeiten] Rotierbefehle
[Bearbeiten] SHR
Schiebt alle Bits nach Rechts, wobei Bit 0 verloren geht.
SHR entspricht einer Integer-Division mit 2d. d entspricht hier der Anzahl der zu rotierenden Bits.
Beweis und Beispielcode:
dim a,d as integer a=32 d=5 print a shr d print a\2^d sleep
[Bearbeiten] SHL
Schiebt alle Bits nach Links, wobei das höchstwertige Bit verloren geht.
SHL entspricht einer Integer-Multiplikation mit 2d. d entspricht hier der Anzahl der zu rotierenden Bits.
Beweis und Beispielcode:
dim a,d as integer a=2 d=5 print a shl d print a*2^d sleep
[Bearbeiten] Bit setzen und löschen
Auch hier gäbe es wieder X Lösungen, aber wir sehen uns nur die eleganteste an:
dim b as integer b=&B1111000 print bin(b) b=bitset(b,0) print bin(b) b=bitset(b,4) print bin(b) b=bitreset(b,3) print bin(b) b=bitreset(b,2) print bin(b) sleep
Mit Bitset setzt man ein Bit, und mit Bitreset löscht man ein Bit.
Der Syntax lautet Bitset(Ausdruck, BitNr) und Bitreset(Ausdruck, BitNr), wobei die Zählung der Bitnummer bei 0 beginnt.
[Bearbeiten] Einzelne Bits anzeigen
Der Bit()-Befehl hat folgenden Syntax: Bit(Ausdruck, BitNr).
Beispielprogramm:
a=&B101001 for i=0 to 5 print bit(a,i) next i sleep