Bitfelder in C

Bitfelder in C
Raumkomplexität ist das wichtigste Kriterium in der C -Sprache. Wir studieren eine Sprache, um eine Software zu entwickeln. Die Hauptbeobachtung eines Produkts besteht darin, Daten in unserem Speicher zu verwalten. Das Bit -Feld hilft uns, Daten in der C -Sprache zu verwalten. Es hilft uns, Speicher weniger als seine Anforderung zu konsumieren. In diesem Artikel werden wir das Konzept der Bit Fields und deren Anwendung diskutieren.

Eigenschaften einer Variablen

Bit -Felder werden verwendet, um den Speicher so effizient zu konsumieren, dass wir unseren Speicherplatz reibungslos verwalten.

Es kann auch in Struktur und Vereinigung verwendet werden.

So implementieren Sie ein Bitfeld im C -Programm

1
2
3
4
5
6
7
8
9
10
11
Strukturdatum

nicht signiert int d;
nicht signiert int m;
nicht signiert int y;
;

Erläuterung

Die Variable des Typs, „Datum“, nimmt 12 Bytes für einen Compiler auf, der 32 Bit eines 64-Bit.

64 Bit

D1
D M y
22 1 2016
4 Bytes 4 Bytes 4 Bytes
= 12 Bytes

32 Bit

D1
D M y
22 1 2016
2 Bytes 2 Bytes 2 Bytes
= 6 Bytes

So reduzieren Sie die Größe einer Variablen in einem Programm

Programmierbeispiel 1

In diesem Programm -Beispiel werden wir sehen, welche Speichermenge von jeder Art von Variable verbraucht wird.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#enthalten
Strukturdatum // Benutzungsdefinierte Datentyp definieren.

nicht signiert int d; // Datenmitglied des Datumsartyps.
nicht signiert int m;
in t y nicht signiert;
;
int main ()

Strukturdatum D1 = 22, 1, 2016; // Datumstypvariable wird deklariert und initialisiert.
printf ("Größe von D1 ist %d", Größe (D1));
Rückkehr 0;

Ausgang

Erläuterung

Die Werte von Datum und Monat sind festgelegt: Das Datum ist 31 und der Monat 12 beträgt 12.

2 31
2 15-2
2 7-1
2 3-1
1-1
2 12
2 6-0
2 3-0
1-1
11111 1100 1100
(5 Bit) (4 Bit)

Aus der vorherigen Berechnung des Datums versuchen wir zu sagen, dass, um einen maximalen Tag in einem Monat (31) darzustellen. Es ist auch im Fall von Monaten das gleiche. Ein Jahr hat 12 Monate. Um 12 im Speicher darzustellen, dauert es nur 4 Bit aus 4 Bytes oder 32 Bits. Aus dieser Wahrnehmung geht hervor, dass der Rest des Gedächtnisses im Fall von Tag und Monat an einem Datum verschwendet wird. In dieser Situation hilft uns das Bit -Feld, das Problem zu lösen.

Programmierbeispiel 2

In diesem Programmierbeispiel werden wir das Bit -Feld verwenden, um Speicher für die Variable zu konsumieren.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#enthalten
Strukturdatum // Benutzungsdefinierte Datentyp definieren.

nicht signiert int d: 5; // Datenmitglied des Datumsartyps.
nicht signiert int m: 4; // Bitfeld als Dickdarm verwenden:
nicht signiert int y;
;
int main ()

Strukturdatum D1 = 22, 1, 2016; // Datumstypvariable wird deklariert und initialisiert.
printf ("Größe von D1 ist %d", Größe (D1));
Rückkehr 0;

Ausgang:

Erläuterung

Wir wissen, dass der Wert von D immer von 1 bis 31 liegt. Ein Jahr enthält 12 Monate. Der Initialisierungswert der Monatsvariablen m beträgt also maximal 12. Wir können den zusätzlichen Platz mit Hilfe von Bit Fields bewältigen.

Verbessertes Beispiel

Einzelspeicher -Bytes

[4 Bytes]

Speicherblock wird mehrere von 4 Bytes erstellt.

Die Variable d1 vom Typ „Datum“ nimmt 8 Bytes auf einen Compiler, während eine nicht signierte Ganzzahl 4 Bytes nimmt.

Programmierbeispiel 3

Wir werden ein weiteres Beispiel für den Speicherverbrauch sehen, ohne ein Bitfeld zu verwenden.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#enthalten
Struktur TM

nicht signiert in HRs;
nicht signiert int min;
nicht signierte int sec;
;
int main ()

Struktur tm t = 11, 30, 10; // Deklaration einer Variablen des benutzerdefinierten Typs.
printf ("Die Zeit ist %d: %d: %d \ n", t.HRS, t.Minze.Sek.);
printf ("die Größe der Uhr = %ld Bytes.\ n ", sizeof (struct tm));
Rückkehr 0;

Ausgang

Erläuterung

Aus der vorherigen Berechnung des Datums versuchen wir zu sagen, dass, um die maximalen Sekunden in einer Stunde (60) darzustellen. Es ist auch das gleiche, wenn das Protokoll gezählt wird. Es sind 60 Minuten in einer Stunde. Um 60 im Speicher darzustellen, dauert es nur 5 Bit aus 4 Bytes oder 32 Bits. Aus dieser Wahrnehmung geht hervor, dass der Rest des Gedächtnisses im Fall von Tag und Monat an einem Datum verschwendet wird. Dieses Problem wird mit Hilfe des Bit -Feldes gelöst.

Programmierbeispiel 4

Hier sehen wir eine weitere Anwendung von Bit Fields.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#enthalten
Struktur TM

nicht signiert in HRS: 8;
nicht signiert int min: 10;
nicht signierte int sec: 10;
;
int main ()

Struktur tm t = 11, 30, 10; // Deklaration einer Variablen des benutzerdefinierten Typs.
printf ("Die Zeit ist %d: %d: %d \ n", t.HRS, t.Minze.Sek.);
printf ("die Größe der Uhr = %ld Bytes.\ n ", sizeof (struct tm));
Rückkehr 0;

Ausgang

Erläuterung

In diesem Programm -Beispiel verwenden wir ein Bit -Feld, um den Speicher zu konsumieren. Wie wir aus dem Beispiel sehen, werden wir das Bit -Feld verwenden (:) Nachdem wir jedes Datenmitglied des Zeitdatentyps deklariert haben und versucht haben, Bits an einem Speicherort zu konsumieren. Infolgedessen werden wir aus dem Ausgangspeicher konsumiert werden.

Abschluss

Aus der vorherigen Erklärung ist es offensichtlich, dass wir das Bit -Feld verwenden müssen, um die Raumkomplexität in der C -Sprache zu verwalten. BIT -Feld hilft uns, zusätzliche Verschwendung von Speicherzuweisung aus dem Speicher zu entfernen, um die Speicherplatzkomplexität zu verwalten. Wir müssen also das Bit -Feld sehr bewusst verwenden, wo es erforderlich ist. Andernfalls können Daten verschwendet werden.