Bitweise schieben (Bit Shift)
Bits einer ganzen Zahl links oder rechts verschieben
Bit Shift Rechner
Bitweise Verschiebung
Mit dieser Funktion werden die Bits einer ganzen Zahl nach links oder rechts verschoben. Links bedeutet Multiplikation, rechts Division mit Zweierpotenzen.
Bit-Shift Visualisierung
Beispiel: 10100110 << 2 (Links-Shift)
Links-Shift
(<<)
Multiplikation
n << k = n × 2^k
Nullen von rechtsRechts-Shift
(>>)
Division
n >> k = n ÷ 2^k
Nullen von linksLogische Verschiebung
- Hinausgeschobene Bits werden verworfen
- Nullen werden nachgezogen (unabhängig von Richtung)
- Keine Vorzeichenbehandlung
- Idealer für unsigned Zahlen
Mathematische Grundlagen der Bit-Verschiebung
Die Bit-Verschiebung ist eine fundamentale Operation, die eine mathematische Beziehung zu Potenzen von 2 hat:
Links-Verschiebung
Jede Position nach links entspricht einer Multiplikation mit 2
Rechts-Verschiebung
Jede Position nach rechts entspricht einer Division durch 2 (abgerundet)
Bit-Shift Formeln und Beispiele
Allgemeine Shift-Formeln
n = Ausgangswert, k = Anzahl Verschiebepositionen
Schritt-für-Schritt Beispiel: 10100110 << 2
Original: 10100110₂ = 166₁₀
Operation: Links-Shift um 2 Positionen
Berechnung: 166 × 2² = 166 × 4 = 664
Binär-Verschiebung:
10100110 → 101001100 → 1010011000
Ergebnis: 1010011000₂ = 664₁₀ = 298₁₆
Rechts-Shift Beispiel: 10100110 >> 2
Original: 10100110₂ = 166₁₀
Operation: Rechts-Shift um 2 Positionen
Berechnung: ⌊166 ÷ 2²⌋ = ⌊166 ÷ 4⌋ = ⌊41.5⌋ = 41
Binär-Verschiebung:
10100110 → 01010011 → 00101001
Ergebnis: 00101001₂ = 41₁₀ = 29₁₆
Weitere Shift-Beispiele
Original: 00001000₂ (8)
Ergebnis: 01000000₂ (64)
Mathematik: 8 × 2³ = 8 × 8 = 64
Original: 01100100₂ (100)
Ergebnis: 00011001₂ (25)
Mathematik: ⌊100 ÷ 4⌋ = 25
Shift-Referenz
Standard-Beispiel
Zweierpotenzen
2⁰ = 1
2¹ = 2
2² = 4
2³ = 8
2⁴ = 16
2⁵ = 32
2⁶ = 64
2⁷ = 128
Shift-Operatoren
<<: Links-Shift (Multiplikation)
>>: Rechts-Shift (Division)
Logisch: Nullen nachziehen
Arithmetisch: Vorzeichen behalten
Circular: Bits rotieren
Häufige Anwendungen
Schnelle Multiplikation: n << k
Schnelle Division: n >> k
Bit-Masken erstellen: (1 << n) - 1
Alignment: (addr + 7) >> 3 << 3
Bitweise Verschiebung - Detaillierte Beschreibung
Bitweise Verschiebung
Bei der Bitweise Verschiebung werden die Binär-Zeichen um eine angegebene Anzahl von Bitpositionen nach links oder rechts verschoben. Die Richtungsangabe wird dabei unabhängig von der Rechnerarchitektur immer in der Standardkonvention des Dualsystems verstanden: Links bedeutet Multiplikation und rechts Division mit einer Zweierpotenz.
• Links-Shift: Multiplikation mit 2^n
• Rechts-Shift: Division durch 2^n
• Sehr schnelle Operation
• Bits werden hinausgeschoben und nachgezogen
Register und Hardware
Register der Prozessoren beherbergen eine definierte endliche Anzahl von Bits, weshalb die spezifizierte Anzahl an Bits an einem Ende aus dem Register „hinausgeschoben", während die gleiche Anzahl am anderen Ende „hineingeschoben" („hereingezogen") wird.
Hardware-Implementierung
1. Bits werden physisch verschoben
2. Leere Positionen werden aufgefüllt
3. Überlaufende Bits gehen verloren
4. Operation erfolgt in einem Taktzyklus
Logische Verschiebung
Bei der hier eingesetzten logischen Verschiebung werden die hinausgeschobenen Bits verworfen und Nullen nachgezogen, unabhängig von der Schieberichtung. Im Unterschied zur arithmetische Verschiebungen können keine vorzeichenbehafteten Zahlen verwendet werden.
• Immer Nullen nachziehen
• Keine Vorzeichenbehandlung
• Geeignet für unsigned Zahlen
• Einfache Implementierung
Mathematische Anwendungen
Die Bit-Verschiebung ist eine der effizientesten Methoden für Multiplikation und Division mit Zweierpotenzen. Sie wird häufig in der Systemprogrammierung, Grafikverarbeitung und bei Performance-kritischen Anwendungen eingesetzt.
Performance-Vorteile
- Extrem schnell (1 Taktzyklus)
- Keine aufwändigen Multiplikationen/Divisionen
- Ideal für Potenzen von 2
- Häufig vom Compiler optimiert
Praktische Bit-Shift Beispiele
Array-Indexierung
Szenario: 4-Byte-Alignment
Index: 5
Adresse: 5 << 2 = 20
Effekt: index × 4 (schneller als *4)
Bit-Masken
Szenario: n-Bit-Maske erstellen
Operation: (1 << n) - 1
Beispiel: (1 << 4) - 1 = 15
Ergebnis: 00001111₂ (4-Bit-Maske)
Speicher-Alignment
Szenario: 8-Byte-Alignment
Adresse: 0x12345678
Alignment: (addr + 7) >> 3 << 3
Ergebnis: Nächste 8er-Grenze
Programmier-Tipps
- Schnelle Multiplikation: n << k statt n * (1<
- Division durch 2^n: value >> n
- Bit-Position prüfen: (value >> bit) & 1
- Overflow beachten: Bits gehen verloren
- Compiler-Optimierung: x*8 → x<<3
- Portabilität: Shift-Verhalten beachten