Logische Verschiebung

Logische Verschiebungs-Operatoren in verschiedenen Programmiersprachen
SpracheLinksRechts
ARM-Assemblerlsllsr
C++ (nur vorzeichenlose Typen)<<>>
C (nur vorzeichenlose Typen)<<>>
Delphishlshr
Java<<>>
Ocamllsllsr
Standard ML<<>>
Verilog<<>>
VHDLsllsrl
JavaScript<<>>

Unter einer logischen Verschiebung (engl. logical shift) versteht man in der Informatik einen bitweisen Operator, der alle Bits des Operanden verschiebt. Die logische im Gegensatz zur arithmetischen Verschiebung erhält weder das Vorzeichenbit noch unterscheidet sie zwischen dem Exponenten und der Mantisse einer Zahl. Jedes Bit des Operanden wird einfach um eine gegebene Positionsanzahl verschoben und die entstehenden Bit-Positionen werden, in der Regel mit Nullen, aufgefüllt.

Eine logische Verschiebung wird oft genutzt, wenn der Operand als Sequenz von Bits und nicht als Zahl betrachtet wird.

Logische Verschiebungen können ein sinnvoller und effizienter Weg sein, Multiplikationen oder Divisionen von vorzeichenlosen Integer-Zahlen (Ganzzahlen) zur zweiten Potenz durchzuführen. Eine Verschiebung nach links um n Bits bei einer vorzeichenlosen oder vorzeichenbehafteten binären Zahl hat den Effekt einer Multiplikation mit 2n. Verschieben nach rechts um n Bits bei einer vorzeichenlosen binären Zahl ist gleichbedeutend mit dem Dividieren durch 2n (und anschließendem Abrunden).

Weil sich arithmetische Verschiebungen und logische Verschiebungen nach rechts unterscheiden, haben viele Programmiersprachen verschiedene Operatoren für sie. So ist der arithmetische Shift-Operator bei Java und JavaScript zum Beispiel >>; wohingegen der logische Rechtsshift >>> ist. Java allein hat nur einen Linksshift-Operator (<<), weil arithmetische und logische Verschiebung denselben Effekt haben.

Die Sprache C wieder kennt nur einen Rechtsshift-Operator >>. Viele C-Compiler entscheiden die Art der Rechtsverschiebung danach, welcher Integer-Datentyp verschoben werden soll; oft werden vorzeichenbehaftete Ganzzahlen arithmetisch verschoben und vorzeichenlose logisch.

Beispiel

Beispiel
Rotate right logically.svg
Logische Verschiebung nach rechts um 1 Bit
Rotate left logically.svg
Logische Verschiebung nach links um 1 Bit


Folgende Bit-Sequenz soll logisch um 1 Bit verschoben werden: 0001 0111 (siehe Bilder)

  • …nach links ergibt: 0010 1110
  • …nach rechts ergibt: 0000 1011

Auf dieser Seite verwendete Medien

Rotate right logically.svg
Autor/Urheber: en:User:Cburnett, Lizenz: CC BY-SA 3.0
Logical rotate one bit right
Rotate left logically.svg
Autor/Urheber: en:User:Cburnett, Lizenz: CC BY-SA 3.0
Logical and arithmetic rotate one bit left