FreeBasic: Logische Operationen
Einleitung
[Bearbeiten]Binärliterale werden so eingegeben:
&b0110
Die Ausgabe als Bitmuster geht mit bin().
Als Beispielprogramm:
a=&b11101111
print a
print bin(a)
sleep
Logische Operatoren
[Bearbeiten]AND OR XOR
[Bearbeiten]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
AND
[Bearbeiten]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.
OR
[Bearbeiten]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.
XOR
[Bearbeiten]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.
NOT
[Bearbeiten]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
IMP
[Bearbeiten]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
Rotierbefehle
[Bearbeiten]SHR
[Bearbeiten]Schiebt alle Bits nach Rechts, wobei Bit 0 verloren geht.
SHR entspricht einer Integer-Division mit . 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
SHL
[Bearbeiten]Schiebt alle Bits nach Links, wobei das höchstwertige Bit verloren geht.
SHL entspricht einer Integer-Multiplikation mit . 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
Bit setzen und löschen
[Bearbeiten]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.
Einzelne Bits anzeigen
[Bearbeiten]Der Bit()-Befehl hat folgenden Syntax: Bit(Ausdruck, BitNr).
Beispielprogramm:
a=&B101001
for i=0 to 5
print bit(a,i)
next i
sleep