Buchempfehlung
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
"Der" Petzold, das über 1000 Seiten starke Standardwerk zum Win32-API - besonders nützlich u. a. bei der GUI-Programmierung in FreeBASIC! [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Referenz - SHL

Referenz-Navigation

 

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.

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 BefehlsreferenzeintragSHR. Sie kann mithilfe von BefehlsreferenzeintragOPERATOR ü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 Befehlsreferenzeintrag-lang qb steht SHL nicht zur Verfügung und kann nur über __SHL aufgerufen werden.

Siehe auch:
BefehlsreferenzeintragSHR, BefehlsreferenzeintragMOD, Befehlsreferenzeintragmathematische Funktionen


Zusätzliche Informationen und Funktionen
  • Der Referenzeintrag wurde am 03.08.2007 von Redakteurnemored angelegt.
  • Die aktuellste Version wurde am 22.12.2012 von Redakteurnemored gespeichert.
  Versionen Versionen