Wikipedia · einfach zusammengefasst · Stand
Logische Verschiebung
Unter einer logischen Verschiebung (engl. logical shift) versteht man in der Informatik einen bitweisen Operator, der alle Bits des Operanden verschiebt.
Grundidee
Eine logische Verschiebung, englisch logical shift, ist in der Informatik ein bitweiser Operator. Dabei werden alle Bits eines Operanden um eine vorgegebene Anzahl von Positionen verschoben. Die frei werdenden Bit-Positionen werden in der Regel mit Nullen aufgefüllt.
Im Unterschied zur arithmetischen Verschiebung erhält die logische Verschiebung kein Vorzeichenbit. Sie unterscheidet auch nicht zwischen Exponent und Mantisse einer Zahl. Sie behandelt den Operanden also vor allem als Folge von Bits, nicht als Zahl mit besonderer Bedeutung einzelner Stellen.
Wirkung auf Zahlen
Logische Verschiebungen können ein sinnvoller und effizienter Weg sein, Multiplikationen oder Divisionen von vorzeichenlosen Integer-Zahlen, also Ganzzahlen ohne Vorzeichen, mit Zweierpotenzen durchzuführen.
Eine Verschiebung nach links um n Bits hat bei einer vorzeichenlosen oder vorzeichenbehafteten binären Zahl den Effekt einer Multiplikation mit 2^{n}. Eine Verschiebung nach rechts um n Bits ist bei einer vorzeichenlosen binären Zahl gleichbedeutend mit dem Dividieren durch 2^{n} und anschließendem Abrunden.
Operatoren in Programmiersprachen
Viele Programmiersprachen haben unterschiedliche Operatoren für arithmetische und logische Rechtsverschiebung, weil sich diese Operationen nach rechts unterscheiden. In Java und JavaScript ist zum Beispiel >> der arithmetische Shift-Operator, während >>> der logische Rechtsshift ist. Java hat nur einen Linksshift-Operator <<, weil arithmetische und logische Verschiebung nach links denselben Effekt haben.
In C gibt es nur einen Rechtsshift-Operator >>. Viele C-Compiler entscheiden die Art der Rechtsverschiebung danach, welcher Integer-Datentyp verschoben wird: Häufig werden vorzeichenbehaftete Ganzzahlen arithmetisch verschoben und vorzeichenlose Ganzzahlen logisch.
Beispiele für Operatoren sind: in C und C++ bei vorzeichenlosen Typen << für links und >> für rechts, in Delphi shl und shr, in Java << und >>>, in Ocaml lsl und lsr, in VHDL sll und srl sowie in ARM-Assembler lsl und lsr.
Beispiel
Eine Bit-Sequenz soll logisch um 1 Bit verschoben werden: 0001 0111.
Bei einer logischen Verschiebung nach links um 1 Bit entsteht: 0010 1110.
Bei einer logischen Verschiebung nach rechts um 1 Bit entsteht: 0000 1011.