C Academy · Les

Verschuivingen

Links en rechts verschuiven

Les 2 van 413 stappen

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) & 1 extraheert één bit.
  • Gebruik unsigned voor voorspelbare verschuivingen en verschuif nooit met de breedte van het type of meer.
Gratis beginnen

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.

Alle lessen in deze cursus

  1. Bitgewijze operatoren
  2. Verschuivingen
  3. Bitmaskers en flags
  4. Praktische bittrucs
← Terug naar C Academy