C Academy · leksjon

Praktiske bittriks

Vanlige teknikker

Leksjon 4 av 413 trinn

Praktiske bittriks er en gratis leksjon i C Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i C Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i C Academy inneholder totalt 4 leksjoner.

Nyttige bittriks

Når bitvise operatorer er forstått, blir en rekke kompakte triks tilgjengelige. De er raske og forekommer ofte i ekte kode.

La oss gå gjennom de vanligste.

#include <stdio.h>

int main(void) {
    unsigned x = 6;
    printf("x & 1 = %u (odd if 1)\n", x & 1);
    return 0;
}

Partall eller oddetall

Den laveste biten angir paritet. x & 1 er 1 for oddetall og 0 for partall.

#include <stdio.h>

int main(void) {
    for (unsigned x = 0; x < 5; x++) {
        printf("%u is %s\n", x, (x & 1) ? "odd" : "even");
    }
    return 0;
}

Kontrollere potens av to

Et positivt tall er en potens av to hvis nøyaktig én bit er satt. Uttrykket x & (x - 1) er 0 bare i dette tilfellet.

#include <stdio.h>

int is_pow2(unsigned x) {
    return x != 0 && (x & (x - 1)) == 0;
}

int main(void) {
    printf("%d %d %d\n", is_pow2(16), is_pow2(18), is_pow2(1));
    return 0;
}

Nullstille laveste satte bit

x & (x - 1) nullstiller den laveste satte biten. Dette er grunnlaget for rask telling av satte biter.

#include <stdio.h>

int main(void) {
    unsigned x = 0b10110;
    printf("before: %u\n", x);
    printf("after:  %u\n", x & (x - 1));
    return 0;
}

Isolere laveste satte bit

x & (-x) isolerer den laveste satte biten, slik at bare denne ene biten er på.

Dette bygger på toerkomplementrepresentasjon.

#include <stdio.h>

int main(void) {
    unsigned x = 0b10110;
    printf("lowest set bit = %u\n", x & (-x));
    return 0;
}

Telle satte biter

Ved å nullstille den laveste satte biten gjentatte ganger kan man telle hvor mange biter som er satt, med like mange trinn som det finnes satte biter.

#include <stdio.h>

int popcount(unsigned x) {
    int n = 0;
    while (x) { x &= (x - 1); n++; }
    return n;
}

int main(void) {
    printf("%d\n", popcount(255));
    printf("%d\n", popcount(0b1010));
    return 0;
}

Bytte uten temp

XOR-bytte utveksler to heltall uten ekstra lagring.

#include <stdio.h>

int main(void) {
    int a = 3, b = 8;
    a ^= b; b ^= a; a ^= b;
    printf("a=%d b=%d\n", a, b);
    return 0;
}

Avrunde opp til en potens av to

En unsigned-verdi kan avrundes opp til neste potens av to ved å spre den høyeste biten nedover og deretter legge til 1.

#include <stdio.h>

unsigned next_pow2(unsigned v) {
    v--;
    v |= v >> 1; v |= v >> 2; v |= v >> 4;
    v |= v >> 8; v |= v >> 16;
    return v + 1;
}

int main(void) {
    printf("%u\n", next_pow2(17));
    printf("%u\n", next_pow2(100));
    return 0;
}

Kontrollere om biter er forskjellige

To verdier har forskjellige biter nøyaktig der a ^ b har satte biter. Ved å telle disse får man Hamming-avstanden.

#include <stdio.h>

int main(void) {
    unsigned a = 0b1101, b = 0b1011;
    unsigned diff = a ^ b;
    int count = 0;
    while (diff) { diff &= diff - 1; count++; }
    printf("hamming distance = %d\n", count);
    return 0;
}

Absoluttverdi uten gren

Ved å bruke fortegnsbiten kan man beregne absoluttverdien uten en if. Masken består av bare ett-tall for negative verdier og bare nuller for ikke-negative verdier.

#include <stdio.h>

int main(void) {
    int x = -42;
    int mask = x >> 31;
    int abs = (x + mask) ^ mask;
    printf("abs = %d\n", abs);
    return 0;
}

Sette en bit etter indeks

Kombiner skift og OR for å sette en vilkårlig bitposisjon som beregnes under kjøring.

#include <stdio.h>

int main(void) {
    unsigned v = 0;
    int positions[] = {1, 3, 5};
    for (int i = 0; i < 3; i++) {
        v |= (1u << positions[i]);
    }
    printf("v = %u\n", v);
    return 0;
}

Hurtigsjekk

Test kunnskapene om bittriks.

Oppsummering

De har lært praktiske bittriks:

  • x & 1 tester oddetall eller partall.
  • x & (x - 1) nullstiller den laveste satte biten og oppdager potenser av to.
  • x & (-x) isolerer den laveste satte biten.
  • Popcount, XOR-bytte, Hamming-avstand og grenløs absoluttverdi.
Gratis å komme i gang

Lær deg C med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
39
Leksjoner
144

Ofte stilte spørsmål

Er leksjonen «Praktiske bittriks» gratis?

Ja – hele teksten i «Praktiske bittriks» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av C Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i C Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Praktiske bittriks»?

Vanlige teknikker Du øver på C Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med C Academy?

Ingen tidligere erfaring er nødvendig. C Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.

Hvor lang tid tar leksjonen «Praktiske bittriks»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne C Academy-leksjonen?

Ja. Alle C Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Bitvise operatorer
  2. Skift
  3. Bitmasker og flagg
  4. Praktiske bittriks
← Tilbake til C Academy