Bittikentät ja liput
Pakkaa totuusarvot ja pienet kentät tiiviisti.
Bittikentät ja liput on ilmainen Zig Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/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 Zig Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Zig Academy-kurssilla on yhteensä 4 oppituntia.
Monta lippua, yksi tavu
Asetukset ovat usein vain päällä–pois-kytkimiä. Pakkaamalla ne bittikentiksi voitte tallentaa monta lippua yhteen pieneen kokonaislukuun.
Totuusarvot käyttävät yhden bitin
Pakatun structin sisällä bool käyttää täsmälleen yhden bitin. Kun niitä sijoitetaan useita peräkkäin, ne jakavat yhden tavun.
const Mode = packed struct {
bold: bool,
italic: bool,
underline: bool,
};Yhdistä totuusarvot ja pienet kokonaisluvut
Pakatun structin voi muodostaa lipuista ja kapeista kokonaisluvuista, jolloin voidaan mallintaa todellinen rekisteri, jossa jokaisella bittiryhmällä on oma merkityksensä.
const Reg = packed struct {
enabled: bool,
speed: u3,
mode: u2,
};Lue lippu nimen perusteella
Käsittelette jokaista bittiä sen kentän nimen kautta, joten koodi pysyy selkeänä, vaikka tiedot on pakattu tiiviisti.
var m = Mode{ .bold = true, .italic = false, .underline = false };
if (m.bold) {}Vaihda lipun arvo
Asettakaa tai tyhjentäkää lippu määrittämällä kentälle arvo. Bittimaskeja ei tarvitse käsitellä käsin, sillä Zig hoitaa bittilaskennan puolestanne.
m.italic = true;Raakabittien näkymä
Tarvitsetteko taustalla olevan luvun? @bitCast muuntaa lippurakenteen sen taustalla olevaksi kokonaisluvuksi tallennusta tai vertailua varten.
const bits: u3 = @bitCast(m);Pura saapuvat bitit
Luetteko bittejä tiedostosta tai laitteesta? Muuntakaa raaka kokonaisluku takaisin structiksi, jotta voitte purkaa sen nimetyiksi lipuiksi.
const incoming: u3 = 0b101;
const m: Mode = @bitCast(incoming);Enumit bittikenttinä
Kenttä voi olla enum, jolla on pieni taustalla oleva kokonaisluku. Näin saadaan nimetyt vaihtoehdot, jotka mahtuvat silti vain muutamaan bittiin.
const Speed = enum(u2) { slow, medium, fast };Miksi pakata
Bittikentät säästävät muistia ja vastaavat laitteistoa täsmällisesti. Tämä on tärkeää sulautetussa koodissa, ajureissa ja binääritiedostomuodoissa.
Asettelu pysyy ennakoitavana
Koska struct on pakattu, bittijärjestys ei muutu. Se, minkä ilmoitatte, on se, minkä laitteisto ja muut ohjelmat näkevät.
Selkeä koodi, tiivis data
Suurin hyöty on tämä: kirjoitatte helppolukuisia kenttänimiä, mutta tiedot pysyvät yhtä tiiviinä kuin käsin toteutetussa bittien käsittelyssä. 🎛️
Pikakysymys
Miettikää, kuinka paljon tilaa bool käyttää packed structin sisällä.
Kertaus
Pakkasitte liput yhteen kokonaislukuun: bool-arvot käyttävät yhden bitin, mukaan voi yhdistää kapeita kokonaislukuja ja enum-tyyppejä, ja @bitCast muuntaa structin ja raakabitit toisikseen. 🎉
Opi Zig 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
- 30
- Oppitunnit
- 120
Usein kysytyt kysymykset
Onko oppitunti ”Bittikentät ja liput” ilmainen?
Kyllä – oppitunnin ”Bittikentät ja liput” 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 Zig Academy-kurssin, päivitä CoddyKit PROhon. Zig Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Bittikentät ja liput”?
Pakkaa totuusarvot ja pienet kentät tiiviisti. Harjoittelet Zig Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Zig Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Zig Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.
Kuinka kauan ”Bittikentät ja liput”-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ä Zig Academy-oppitunnilla?
Kyllä. Jokainen Zig 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
- packed struct täsmälliseen asetteluun
- Mielivaltaisen levyiset kokonaisluvut, kuten u3
- Bittikentät ja liput
- extern struct ja ABI-asettelu