Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

C - Bitvelden

Stel dat uw C-programma een aantal TRUE/FALSE-variabelen bevat, gegroepeerd in een structuur die status wordt genoemd, als volgt:−

struct {
   unsigned int widthValidated;
   unsigned int heightValidated;
} status;

Deze structuur vereist 8 bytes geheugenruimte, maar in feite gaan we 0 of 1 opslaan in elk van de variabelen. De programmeertaal C biedt een betere manier om de geheugenruimte in dergelijke situaties te benutten.

Als u dergelijke variabelen binnen een structuur gebruikt, kunt u de breedte van een variabele definiëren die de C-compiler vertelt dat u alleen dat aantal bytes gaat gebruiken. De bovenstaande structuur kan bijvoorbeeld als volgt worden herschreven −

struct {
   unsigned int widthValidated : 1;
   unsigned int heightValidated : 1;
} status;

De bovenstaande structuur vereist 4 bytes geheugenruimte voor de statusvariabele, maar er worden slechts 2 bits gebruikt om de waarden op te slaan.

Als u maximaal 32 variabelen wilt gebruiken, elk met een breedte van 1 bit, dan zal ook de statusstructuur 4 bytes gebruiken. Zodra u echter 33 variabelen hebt, wijst het de volgende sleuf van het geheugen toe en begint het 8 bytes te gebruiken. Laten we het volgende voorbeeld bekijken om het concept te begrijpen −

Live demo
#include <stdio.h>
#include <string.h>

/* define simple structure */
struct {
   unsigned int widthValidated;
   unsigned int heightValidated;
} status1;

/* define a structure with bit fields */
struct {
   unsigned int widthValidated : 1;
   unsigned int heightValidated : 1;
} status2;
 
int main( ) {
   printf( "Memory size occupied by status1 : %d\n", sizeof(status1));
   printf( "Memory size occupied by status2 : %d\n", sizeof(status2));
   return 0;
}

Wanneer de bovenstaande code wordt gecompileerd en uitgevoerd, levert dit het volgende resultaat op −

Memory size occupied by status1 : 8
Memory size occupied by status2 : 4

Bitvelddeclaratie

De declaratie van een bitveld heeft de volgende vorm binnen een structuur −

struct {
   type [member_name] : width ;
};

De volgende tabel beschrijft de variabele elementen van een bitveld −

Zr.nr. Element en beschrijving
1

type

Een integer type dat bepaalt hoe de waarde van een bitveld wordt geïnterpreteerd. Het type kan int, ondertekend int of unsigned int zijn.

2

naam lid

De naam van het bitveld.

3

breedte

Het aantal bits in het bitveld. De breedte moet kleiner zijn dan of gelijk zijn aan de bitbreedte van het opgegeven type.

De variabelen die met een vooraf gedefinieerde breedte zijn gedefinieerd, worden bitvelden genoemd . Een bitveld kan meer dan een enkele bit bevatten; als u bijvoorbeeld een variabele nodig hebt om een ​​waarde van 0 tot 7 op te slaan, kunt u als volgt een bitveld met een breedte van 3 bits definiëren −

struct {
   unsigned int age : 3;
} Age;

De bovenstaande structuurdefinitie instrueert de C-compiler dat de variabele leeftijd slechts 3 bits gaat gebruiken om de waarde op te slaan. Als u meer dan 3 bits probeert te gebruiken, kunt u dit niet doen. Laten we het volgende voorbeeld proberen −

Live demo
#include <stdio.h>
#include <string.h>

struct {
   unsigned int age : 3;
} Age;

int main( ) {

   Age.age = 4;
   printf( "Sizeof( Age ) : %d\n", sizeof(Age) );
   printf( "Age.age : %d\n", Age.age );

   Age.age = 7;
   printf( "Age.age : %d\n", Age.age );

   Age.age = 8;
   printf( "Age.age : %d\n", Age.age );

   return 0;
}

Wanneer de bovenstaande code is gecompileerd, wordt deze gecompileerd met een waarschuwing en wanneer deze wordt uitgevoerd, levert deze het volgende resultaat op −

Sizeof( Age ) : 4
Age.age : 4
Age.age : 7
Age.age : 0

C Taal

  1. C# Bitsgewijze en Bit Shift-operators
  2. Soorten door de gebruiker gedefinieerde functies in C-programmering
  3. Geef arrays door aan een functie in C
  4. C-structuren en aanwijzers
  5. Java dit trefwoord
  6. Java-inkapseling
  7. C++-structuur met voorbeeld
  8. C - Functies
  9. C - Variabele argumenten
  10. MATLAB - Integratie
  11. C# - Methoden