Wat is Bitveld (bit-field)?

Een mechanisme om een member van een struct in C te declareren als een veld met een opgegeven aantal bits, zoals in unsigned int x : 3; Omdat kleine waarden zo compact kunnen worden opgeslagen, worden bitvelden gebruikt om vlaggen en instellingen te groeperen. Een waarde opslaan die niet in een veld zonder teken past, laat de rest over bij deling door 2 tot de macht van de veldbreedte. Of velden vanaf het hoge of het lage einde van een woord worden geplaatst, en of een veld een grens mag overschrijden, mag per implementatie verschillen, dus om registers van randapparaten of communicatieformaten te beschrijven, worden vaak maskers en shifts gebruikt.

Japanse benaming: ビットフィールド

“Bitveld (bit-field)” komt voor in 2 oefenvragen uit 2 onderwerpen, bijv. Embedded systemen en firmware, Basis van programmeren in C.

Vakgebied: Basis van programmeren in C

Nu oefenen: vragen over Bitveld (bit-field)

Waarop moet worden gelet wanneer in C met een struct met bitvelden de registers van een randschakeling worden voorgesteld?

  1. ABitvelden maken het programma altijd twee keer zo snel
  2. BDe volgorde van de bits in bitvelden mag per compiler verschillen, dus met een andere compiler kunnen onbedoeld andere bits worden bewerkt
  3. CBitvelden kunnen geen waarden van 8 bit of meer weergeven
Antwoord en toelichting tonen

Antwoord: B. De volgorde van de bits in bitvelden mag per compiler verschillen, dus met een andere compiler kunnen onbedoeld andere bits worden bewerkt

Bitvelden zijn leesbaar te schrijven, maar de C-norm laat het aan de implementatie of bits in een struct van hoog naar laag of van laag naar hoog worden geplaatst, hoe velden die een grens overschrijden worden behandeld en welke toegangsbreedte wordt gebruikt. Wat bij de ene compiler goed werkt, kan daarom bij een andere compiler of CPU andere bits lezen of schrijven. De headers van microcontrollerfabrikanten zijn vaak geschreven met maskers en verschuivingen.

“Bitveld (bit-field)” in de toelichting

Vragen met “Bitveld (bit-field)” (2)

  1. Waarop moet worden gelet wanneer in C met een struct met bitvelden de registers van een randschakeling worden voorgesteld?
  2. Wat is de uitvoer als de bovenstaande code, die 9 opslaat in een bitveld van 3 bits, wordt uitgevoerd?

Verwante termen

Struct (C-structuur) Bufferoverloop (buffer overflow) Dangling pointer Dynamische geheugentoewijzing Functiepointer Geheugenlek (memory leak) Integerpromotie (integer promotion) Macro (#define) Ongedefinieerd gedrag (undefined behavior) Pointer

Naar de woordenlijst