0Pricing
C Academy · Lektion

Shifts

Links- und Rechtsshift

Shifts ist eine kostenlose C Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C Academy-Kurs umfasst insgesamt 4 Lektionen.

Bits verschieben

Schiebeoperatoren verschieben alle Bits einer Ganzzahl um eine bestimmte Anzahl von Positionen nach links oder rechts.

Die Linksverschiebung ist <<, die Rechtsverschiebung >>.

#include <stdio.h>

int main(void) {
    unsigned x = 1;
    printf("1 << 3 = %u\n", x << 3);
    return 0;
}

Linksverschiebung multipliziert

Eine Verschiebung um n Positionen nach links multipliziert einen vorzeichenlosen Wert mit 2 hoch n.

1 << 3 ergibt 8 und 5 << 1 ergibt 10.

#include <stdio.h>

int main(void) {
    printf("5 << 1 = %u\n", 5u << 1);
    printf("3 << 4 = %u\n", 3u << 4);
    return 0;
}

Rechtsverschiebung dividiert

Eine Verschiebung um n Positionen nach rechts dividiert einen vorzeichenlosen Wert durch 2 hoch n. Dabei werden die Bits verworfen, die am rechten Ende herausfallen.

20 >> 2 ergibt 5.

#include <stdio.h>

int main(void) {
    printf("20 >> 2 = %u\n", 20u >> 2);
    printf("7 >> 1 = %u\n", 7u >> 1);
    return 0;
}

Potenzen von zwei

Eine Linksverschiebung von 1 ist die schnellste Möglichkeit, Zweierpotenzen zu erzeugen.

1 << n ist die n-te Zweierpotenz.

#include <stdio.h>

int main(void) {
    for (int n = 0; n < 6; n++) {
        printf("2^%d = %u\n", n, 1u << n);
    }
    return 0;
}

Eine Verschiebung visualisieren

Die Ausgabe der Bits vor und nach der Verschiebung zeigt, wie sich das Muster verschiebt.

#include <stdio.h>

void print_bits(unsigned char v) {
    for (int i = 7; i >= 0; i--) putchar((v >> i) & 1 ? '1' : '0');
    putchar('\n');
}

int main(void) {
    unsigned char v = 0b00000110;
    print_bits(v);
    print_bits(v << 2);
    return 0;
}

Ein Bit extrahieren

Um Bit Nummer i auszulesen, verschieben Sie den Wert um i Stellen nach rechts und maskieren ihn mit 1.

Das Ergebnis ist 0 oder 1.

#include <stdio.h>

int main(void) {
    unsigned v = 0b10110;
    for (int i = 0; i < 5; i++) {
        printf("bit %d = %u\n", i, (v >> i) & 1);
    }
    return 0;
}

Einen Wert Bit für Bit aufbauen

Sie können eine Zahl zusammensetzen, indem Sie Bits an die richtige Stelle verschieben und sie mit OR kombinieren.

#include <stdio.h>

int main(void) {
    unsigned v = 0;
    v |= (1u << 0);
    v |= (1u << 2);
    v |= (1u << 4);
    printf("v = %u\n", v);
    return 0;
}

Vorsicht bei der Rechtsverschiebung vorzeichenbehafteter Werte

Das Verschieben einer negativen vorzeichenbehafteten Ganzzahl nach rechts ist implementierungsabhängig: Das Vorzeichenbit kann dabei kopiert werden.

Für vorhersehbare Bitoperationen sollten Sie unsigned-Typen bevorzugen.

#include <stdio.h>

int main(void) {
    int s = -8;
    printf("-8 >> 1 = %d (implementation-defined)\n", s >> 1);
    unsigned u = 8;
    printf("8u >> 1 = %u\n", u >> 1);
    return 0;
}

Übermäßiges Verschieben vermeiden

Eine Verschiebung um einen Betrag, der größer oder gleich der Typbreite ist, führt zu undefiniertem Verhalten.

Das Verschieben eines 32-Bit-Werts um 32 oder mehr Stellen ist nicht zulässig.

#include <stdio.h>
#include <limits.h>

int main(void) {
    printf("unsigned has %zu bits\n", sizeof(unsigned) * CHAR_BIT);
    printf("Safe shift 1u << 31 = %u\n", 1u << 31);
    return 0;
}

Verschieben und Maskieren kombinieren

Durch die Kombination von Verschieben und Maskieren lässt sich ein Feld aus mehreren Bits extrahieren. Hier lesen wir die mittleren 4 Bits eines Bytes aus.

#include <stdio.h>

int main(void) {
    unsigned v = 0b11010110;
    unsigned field = (v >> 2) & 0b1111;
    printf("field = %u\n", field);
    return 0;
}

Schnell multiplizieren und addieren

Durch das Kombinieren von Verschiebungen können Sie schnell mit Konstanten multiplizieren. Die Multiplikation mit 10 entspricht einer Verschiebung um 3 Stellen (mal 8) plus einer Verschiebung um 1 Stelle (mal 2).

#include <stdio.h>

int main(void) {
    unsigned x = 7;
    unsigned times10 = (x << 3) + (x << 1);
    printf("7 * 10 = %u\n", times10);
    return 0;
}

Kurzer Test

Testen Sie Ihr Wissen über Verschiebungen.

Zusammenfassung

Sie haben die Verschiebungsoperatoren kennengelernt:

  • << verschiebt nach links und multipliziert mit Zweierpotenzen.
  • >> verschiebt nach rechts und dividiert durch Zweierpotenzen.
  • (v >> i) & 1 extrahiert ein einzelnes Bit.
  • Verwenden Sie unsigned für vorhersehbare Verschiebungen, und verschieben Sie niemals um die Typbreite oder mehr Stellen.

Häufig gestellte Fragen

Ist die Lektion „Shifts“ kostenlos?

Ja — der vollständige Text von „Shifts“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Shifts“?

Links- und Rechtsshift Du übst C Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C Academy zu starten?

Keine Vorkenntnisse erforderlich. C Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Shifts“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C Academy-Lektion Code schreiben und ausführen?

Ja. Jede C Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Bitweise Operatoren
  2. Shifts
  3. Bitmasken und Flags
  4. Praktische Bit-Tricks
← Zurück zu C Academy