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) & 1extrahiert ein einzelnes Bit.- Verwenden Sie
unsignedfü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.