SHL

FreeBASIC-Referenz » Alphabetische Befehlsreferenz » S » SHL

Syntax A: Ergebnis = Zahl1 SHL Zahl2
Syntax B: Zahl1 SHL= Zahl2
Typ: Operator
Kategorie: mathematische Operatoren

Verschiebt alle Bits in der Variable um eine bestimmte Stellenzahl nach links.

SHL ist für einen INTEGER gleichwertig mit der Multiplikation einer Zweierpotenz; der Exponent dabei ist 'Zahl2'.

Ergebnis = Zahl1 SHL Zahl2

entspricht also

Ergebnis = Zahl1 * (2 ^ Zahl2)

SHL wird dabei aber schneller durchgeführt als der oben genannte Ausdruck, selbst wenn (2 ^ Zahl2) durch seinen Wert als Konstante ersetzt wird. SHL wird daher zur Optimierung des Codes verwendet.

SHL ist die Gegenfunktion zu SHR. Sie kann mithilfe von OPERATOR überladen werden.

Beispiel:

DIM AS UBYTE  a, b, c
DIM AS SINGLE d, e, f

a = 3
b = 2
c = a SHL b

PRINT BIN(a, 8); " wird um "; b; " Stellen nach links";
PRINT " verschoben. Das Ergebnis ist "; BIN(c, 8); "."
c SHL= 5
PRINT "Um fuenf weitere Stellen nach links verschoben";
PRINT " ergibt sich "; BIN(c, 8); "."

d = 2.9
e = 2.4
f = d SHL e

PRINT BIN(d, 8); " wird um "; e; " Stellen nach links";
PRINT " verschoben. Das Ergebnis ist "; BIN(f, 8); "."
f SHL= 5
PRINT "Um fuenf weitere Stelle nach links verschoben";
PRINT " ergibt sich "; BIN(f); "."
SLEEP

Ausgabe:

00000011 wird um 2 Stellen nach links verschoben. Das Ergebnis ist 00001100.
Um fuenf weitere Stelle nach links verschoben ergibt sich 10000000.
00000011 wird um  2.4 Stellen nach links verschoben. Das Ergebnis ist 00001100.
Um fuenf weitere Stelle nach links verschoben ergibt sich 110000000.

Ein UBYTE hat nur acht Bits. Deswegen geht bei der Verschiebung von &H00001100 um fünf Stellen nach links das erste Bit verloren, wodurch das Ergebnis &H10000000 zustande kommt.
Die Variable 'd' wird hier zu 3 auf-, die Variable 'e' zu 2 abgerundet. Deshalb ergeben sich auch für die SINGLE-Zeilen dieselben Werte wie bei den UBYTE-Zeilen. Da für SINGLE-Variablen aber 32 Bit anstelle von 8 reserviert werden, geht das erste Bit nicht verloren. So kommt das Ergebnis &H110000000 anstelle von &H10000000 zustande.
Dieser Code bietet sich zum Experimentieren an; ändern Sie einfach die Zahlenwerte für a, b, c, d, e und f.

Unterschiede zu QB: neu in FreeBASIC

Unterschiede unter den FB-Dialektformen:
In der Dialektform -lang qb steht SHL nicht zur Verfügung und kann nur über __SHL aufgerufen werden.

Siehe auch:
SHR, MOD, mathematische Funktionen