Referenz - SHL
Syntax A: Ergebnis = Zahl1 SHL Zahl2
Syntax B: Zahl1 SHL= Zahl2
Typ: Operator
Kategorie: Mathematik
SHL verschiebt alle Bits in der Variablen um eine bestimmte Stellenzahl nach links.
- 'Zahl1' und 'Zahl2' sind INTEGER-Werte. Wird SHL mit Gleitkommazahlen (SINGLE oder DOUBLE) verwendet, so werden diese zuerst mithilfe von CINT mathematisch gerundet.
- Beim kombinierten SHL (Syntax B) wird der Wert von 'Zahl1' um 'Zahl2' Stellen nach links verschoben; es ist die Kurzform für Zahl1 = Zahl1 SHL Zahl2
- Bits, die über die letzte Stelle hinaus verschoben werden, gehen verloren.
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
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|