Käytännön bittikikat
Yleiset tekniikat.
Käytännön bittikikat on ilmainen C Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu C Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C Academy-kurssilla on yhteensä 4 oppituntia.
Hyödyllisiä bittikikkoja
Kun bittikohtaiset operaattorit ovat tuttuja, käyttöön tulee joukko tiiviitä kikkoja. Ne ovat nopeita ja niitä esiintyy usein oikeassa koodissa.
Käydään läpi yleisimmät niistä.
#include <stdio.h>
int main(void) {
unsigned x = 6;
printf("x & 1 = %u (odd if 1)\n", x & 1);
return 0;
}Parillisuus tai parittomuus
Alin bitti ilmaisee pariteetin. x & 1 on parittomilla luvuilla 1 ja parillisilla luvuilla 0.
#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;
}Kahden potenssin tarkistaminen
Positiivinen luku on kahden potenssi, jos siinä on asetettuna täsmälleen yksi bitti. Lauseke x & (x - 1) on 0 vain tässä tapauksessa.
#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;
}Alimman asetetun bitin nollaaminen
x & (x - 1) nollaa alimman asetetun bitin. Tämä muodostaa nopean asetettujen bittien laskennan perustan.
#include <stdio.h>
int main(void) {
unsigned x = 0b10110;
printf("before: %u\n", x);
printf("after: %u\n", x & (x - 1));
return 0;
}Alimman asetetun bitin eristäminen
x & (-x) eristää alimman asetetun bitin ja jättää päälle vain kyseisen yksittäisen bitin.
Tämä perustuu kahden komplementin esitykseen.
#include <stdio.h>
int main(void) {
unsigned x = 0b10110;
printf("lowest set bit = %u\n", x & (-x));
return 0;
}Asetettujen bittien laskeminen
Kun alin asetettu bitti nollataan toistuvasti, saadaan laskettua asetettujen bittien määrä. Vaiheita tarvitaan yhtä monta kuin asetettuja bittejä on.
#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;
}Vaihtaminen ilman väliaikaista muuttujaa
XOR-vaihdolla kaksi kokonaislukua voidaan vaihtaa ilman ylimääräistä tallennustilaa.
#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;
}Pyöristäminen ylöspäin kahden potenssiin
Voitte pyöristää etumerkittömän arvon ylöspäin seuraavaan kahden potenssiin levittämällä ylimmän bitin alaspäin ja lisäämällä sitten 1:n.
#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;
}Eriävien bittien tarkistaminen
Kahden arvon bitit eroavat täsmälleen niissä kohdissa, joissa a ^ b sisältää asetettuja bittejä. Niiden laskeminen antaa Hamming-etäisyyden.
#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;
}Itseisarvo ilman haaraa
Etumerkkibitin avulla voitte laskea itseisarvon ilman if-lausetta. Maski sisältää pelkkiä ykkösiä negatiivisilla arvoilla ja pelkkiä nollia epänegatiivisilla arvoilla.
#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;
}Bitin asettaminen indeksin perusteella
Yhdistämällä siirron ja OR-operaation voitte asettaa ajon aikana lasketun mielivaltaisen bittipaikan.
#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;
}Pikatarkistus
Testatkaa bittikikkoja koskevat tietonne.
Kertaus
Opitte käytännöllisiä bittikikkoja:
x & 1testaa parillisuuden tai parittomuuden.x & (x - 1)nollaa alimman asetetun bitin ja tunnistaa kahden potenssit.x & (-x)eristää alimman asetetun bitin.- Popcount, XOR-vaihto, Hamming-etäisyys ja haaraton itseisarvo.
Opi C tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 39
- Oppitunnit
- 144
Usein kysytyt kysymykset
Onko oppitunti ”Käytännön bittikikat” ilmainen?
Kyllä – oppitunnin ”Käytännön bittikikat” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko C Academy-kurssin, päivitä CoddyKit PROhon. C Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Käytännön bittikikat”?
Yleiset tekniikat. Harjoittelet C Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni C Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin C Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”Käytännön bittikikat”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä C Academy-oppitunnilla?
Kyllä. Jokainen C Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Bittikohtaiset operaattorit
- Siirrot
- Bittimaskit ja liput
- Käytännön bittikikat