Praktiske bittriks
Vanlige teknikker
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 & 1tester 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.
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
- Bitvise operatorer
- Skift
- Bitmasker og flagg
- Praktiske bittriks