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