Shift-Operatoren

Operationen auf BitLevel-Ebene

Das Verständnis für die Funktionen auf Bit-Ebene war in der IT-Urzeit notwendig. Computer arbeiten auf dieser Ebene, und je weniger 'höher' entwickelte Werkzeuge zur Verfügung stehen, umso mehr muss man sich mit Binären Zahlen und Bool-Algebra auseinandersetzen. Heute ist dieses Thema nur für wenige EntwicklerInnen wichtig, die weit in die Tiefen der internen Verarbeitung, oder gar bis zu Hardware-Registern vorgedrungen sind. Allerdings stößt man auch in anderen Bereichen oft an die Grenze der Bit-Ebene - Für diesen Fall werden hier einige Themen vorgestellt.
BitLevel Operationen auf Bit-Ebene
Live-Demo Bitmuster, Interpretation und Verknüpfung
Shift-Operatoren LSL, LSR, ASL, ASR, ROL, ROR, SWAP
Programmiersprachen C++, Javascript, Perl, PHP, VBA, ..
Darstellung Binär - Ausgabe, Umwandlung Dezimalzahl - Binär-String
Kalkulation Binärzahlen in OpenOffice und Excel
Verwandte Themen Interne Darstellung: 2er-Komplement, Gleitkomma-Zahlen, Zeichencodes
Links Ausgewählte Links zum Thema 'Bit-Level'

Live-Demonstration

VariableEingabe binoctdecneghexchr
a 00 0  0 
b 00 0  0 
Automatische Eingabe:
Zufalls-Bytes oder verschiedene Bit-Muster
Bitte um etwas Geduld nach der Eingabe - Ausführung umfangreicher Rechnungen !
Manuelle Eingabe in Spalte Eingabe : Dezimalzahlen 0..255 oder Bitmuster (prefix 0b ) oder Octalzahlen (führende 0 ) oder Hexadezimalzahlen (prefix # oder 0x ) oder Zeichen in " "
NOT 
0
0
0
0
AND
0
0
0
0
0
0
OR
0
0
0
0
0
0
XOR
0
0
0
0
0
0
NAND
0
0
0
0
0
0
NOR
0
0
0
0
0
0
In der Tabelle ganz oben werden die beiden Test-Variablen a und b eingegeben und in verschiedenen Formaten dargestellt.
Das gleiche Byte wird in allen für die heutige Informatik wichtigen Zahlen-Systemen angezeigt: Binär bin oder Octal oct oder Dezimal dec oder Hexadezimal hex
Wenn das führende (höchstwertige) Bit=1, dann kann die gleiche Variable je nach Anwendung auch als negative Zahl neg interpretiert werden. (Details zum 2er-Komplement)
In einer Text-Umgebung wird die gleiche Variable als → Zeichen chr interpretiert.
Die 6 kleinen Tabellen zeigen die wichtigsten logischen Verknüpfungen. Der NOT-Operator kehrt jedes Bit um, d.h. aus jedem 1-Bit wird ein 0-Bit und umgekehrt. Alle anderen "Bitwise"-Operatoren verknüpfen 2 (oder mehr) Variable. Dabei wird jedes Bit der Variablen a mit dem korrespondierenden Bit der Variablen a verknüpft, also z.B. Bit(a,0) mit Bit(b,0). Klicken sie zur Demonstration mehrmals die Tasten Zufall oder BitMuster.

Shift und Rotate

Kapitel in Arbeit !  
VariableEingabe binoctdecneghexchr
a 0 0 0 0  0 
Zufalls-Zahl
 

Logical Shift

Diese Operation wird zur Arbeit mit Bit-Mustern verwendet, z.B. um ein oder mehrere Bits einer Variablen zu isolieren.
Das entfernte Bit wird jeweils in die carry-Position gesetzt, das neu eingesetzte Bit ist immer 0.
Die carry-Position ist ein 1-Bit Speicher außerhalb jenes Registers, in dem sich die Variable befindet. Man verwendet carry u.a. zur Verkettung mehrerer Register.
LSL
na << n
00 000000000
10 000000000
20 000000000
30 000000000
40 000000000
50 000000000
60 000000000
70 000000000
80 000000000
LSR
na >> n
00 000000000
10 000000000
20 000000000
30 000000000
40 000000000
50 000000000
60 000000000
70 000000000
80 000000000

Arithmetic Shift

Diese Operation arbeitet ähnlich wie der Logical Shift, nimmt jedoch besondere Rücksicht auf das höchstwertige Bit. Dieses Bit trägt in arithmetischen Operationen das Vorzeichen. Je nach Register-Breite (Wort-Breite) des Prozessors ist dieses Bit die Nummer 7, 15, 31, ...
Beim Shift nach rechts (ASR) wird das neu eingesetzte Bit gleich dem vorherigen Vorzeichen-Bit gesetzt (sign preserve).
ASL
na
00 000000000
10 000000000
20 000000000
30 000000000
40 000000000
50 000000000
60 000000000
70 000000000
80 000000000
ASR
na
00 000000000
10 000000000
20 000000000
30 000000000
40 000000000
50 000000000
60 000000000
70 000000000
80 000000000

Rotate

Die Rotate-Funktionen setzen das neue Bit gleich dem entfernten Bit. Zusätzlich ist das jeweils bewegte Bit im carry verfügbar.

Manche Prozessoren bieten zusätzlich die Funktionen ROXL und ROXR
Sie arbeiten wie ROL und ROR, rotieren jedoch zusätzlich das carry-Bit. In diesem Fall wird ein 8-Bit Register daher mit 9 Schritten vollständig rotiert, ein 16-Bit Register mit 17 schritten usw.
ROL
na
00 000000000
10 000000000
20 000000000
30 000000000
40 000000000
50 000000000
60 000000000
70 000000000
80 000000000
ROR
na
00 000000000
10 000000000
20 000000000
30 000000000
40 000000000
50 000000000
60 000000000
70 000000000
80 000000000

Swap

Dieser Befehl wird von zwar den meisten Prozessoren angeboten, jedoch kaum in Programmiersprachen. Er vertauscht die beiden Hälften eines Registers.
SWAP
na
0000000000
1000000000
2000000000