Verschuivingen
Links en rechts verschuiven
Verschuivingen is een gratis C Academy-les op CoddyKit. Dit is les 2 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject C Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus C Academy bevat in totaal 4 lessen.
Bits verschuiven
Verschuivingsoperatoren verplaatsen alle bits van een geheel getal een aantal posities naar links of rechts.
Naar links verschuiven is << en naar rechts verschuiven is >>.
#include <stdio.h>
int main(void) {
unsigned x = 1;
printf("1 << 3 = %u\n", x << 3);
return 0;
}Naar links verschuiven vermenigvuldigt
Een unsigned waarde n posities naar links verschuiven, vermenigvuldigt deze met 2 tot de macht n.
1 << 3 is 8 en 5 << 1 is 10.
#include <stdio.h>
int main(void) {
printf("5 << 1 = %u\n", 5u << 1);
printf("3 << 4 = %u\n", 3u << 4);
return 0;
}Naar rechts verschuiven deelt
Een unsigned waarde n posities naar rechts verschuiven, deelt deze door 2 tot de macht n. Bits die aan de rechterkant verdwijnen, worden weggegooid.
20 >> 2 is 5.
#include <stdio.h>
int main(void) {
printf("20 >> 2 = %u\n", 20u >> 2);
printf("7 >> 1 = %u\n", 7u >> 1);
return 0;
}Machten van twee
1 naar links verschuiven is de snelste manier om machten van twee te genereren.
1 << n is de n-de macht van twee.
#include <stdio.h>
int main(void) {
for (int n = 0; n < 6; n++) {
printf("2^%d = %u\n", n, 1u << n);
}
return 0;
}Een verschuiving zichtbaar maken
Als je de bits voor en na afdrukt, zie je hoe het patroon verschuift.
#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;
}Een bit uitlezen
Als je bit nummer i wilt uitlezen, verschuif je de waarde i posities naar rechts en maskeer je met 1.
Het resultaat is 0 of 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;
}Een waarde bit voor bit opbouwen
Je kunt een getal opbouwen door bits naar hun positie te verschuiven en ze met OR te combineren.
#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;
}Let op bij rechts verschuiven van signed waarden
Rechts verschuiven van een negatief signed geheel getal is implementatieafhankelijk: de tekenbit kan worden gekopieerd.
Gebruik voor voorspelbare bitsgewijze bewerkingen bij voorkeur typen van het type unsigned.
#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;
}Verschuif niet te ver
Verschuiven met een aantal dat groter is dan of gelijk is aan de breedte van het type is ongedefinieerd gedrag.
Een waarde van 32 bits verschuiven met 32 of meer bits is niet toegestaan.
#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;
}Verschuiving en masker combineren
Met een verschuiving en een masker samen kun je een veld van meerdere bits extraheren. Hier halen we de middelste 4 bits uit een byte.
#include <stdio.h>
int main(void) {
unsigned v = 0b11010110;
unsigned field = (v >> 2) & 0b1111;
printf("field = %u\n", field);
return 0;
}Snel vermenigvuldigen en optellen
Met gecombineerde verschuivingen kun je snel met constanten vermenigvuldigen. Vermenigvuldigen met 10 is gelijk aan 3 bits verschuiven (maal 8) plus 1 bit verschuiven (maal 2).
#include <stdio.h>
int main(void) {
unsigned x = 7;
unsigned times10 = (x << 3) + (x << 1);
printf("7 * 10 = %u\n", times10);
return 0;
}Korte controle
Test je kennis van verschuivingen.
Samenvatting
Je hebt de verschuivingsoperatoren geleerd:
<<verschuift naar links en vermenigvuldigt met machten van twee.>>verschuift naar rechts en deelt door machten van twee.(v >> i) & 1extraheert één bit.- Gebruik
unsignedvoor voorspelbare verschuivingen en verschuif nooit met de breedte van het type of meer.
Leer C met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 39
- Lessen
- 144
Veelgestelde vragen
Is de les “Verschuivingen” gratis?
Ja — de volledige tekst van “Verschuivingen” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus C Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus C Academy bevat in totaal 4 lessen.
Wat leer ik in “Verschuivingen”?
Links en rechts verschuiven Je oefent met C Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met C Academy te beginnen?
Ervaring vooraf is niet nodig. C Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.
Hoe lang duurt de les “Verschuivingen”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over C Academy?
Ja. Elke les over C Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.