Bit Fields in C

Bit Fields in C
La complessità dello spazio è il criterio più importante nella lingua C. Studiamo una lingua per sviluppare qualsiasi software. L'osservazione principale di un prodotto è gestire i dati nella nostra memoria. Il campo bit ci aiuta a gestire i dati nella lingua C. Ci aiuta a consumare memoria meno del suo requisito. In questo articolo, discuteremo il concetto di bit campi e la loro applicazione.

Caratteristiche di una variabile

I campi bit vengono utilizzati per consumare la memoria in modo efficiente in modo tale da gestire il nostro spazio di memoria in modo regolare.

Può essere usato anche nella struttura e nell'unione.

Come implementare un campo un po 'nel programma C

1
2
3
4
5
6
7
8
9
10
11
Data della struttura

non firmato int d;
non firmato int m;
non firmato int y;
;

Spiegazione

La variabile di tipo, "data", prende 12 byte su un compilatore che sono 32 bit su un compilatore a 64 bit, mentre "Data" prende 6 byte su un compilatore che sono 16 bit.

64 bit

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

32 bit

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

Come ridurre la dimensione di una variabile in un programma

Esempio di programmazione 1

In questo esempio di programmazione, vedremo quale quantità di memoria viene consumata da qualsiasi tipo di variabile.

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
#includere
Data della struttura // Definizione del tipo di dati definito dall'utente.

non firmato int d; // Membro dati del tipo di dati della data.
non firmato int m;
non firmato in T y;
;
int main ()

Struttura Data D1 = 22, 1, 2016; // La variabile del tipo di data viene dichiarata e inizializzata.
printf ("dimensione di d1 è %d", sizeof (d1));
restituzione 0;

Produzione

Spiegazione

I valori della data e del mese sono fissi: la data è 31 e il mese è 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)

Dal precedente calcolo della data, stiamo cercando di dire che per rappresentare un giorno massimo in un mese (31), sono richiesti solo 5 bit di memoria su 4 byte o 32 bit. È lo stesso anche nel caso del conteggio dei mesi. Ci sono 12 mesi in un anno. Per rappresentare 12 nella memoria, ci vogliono solo 4 bit su 4 byte o 32 bit. Pertanto, da questa percezione è chiaro che il resto della memoria sia sprecato nel caso del giorno e del mese in una data. In questa situazione, il campo bit ci aiuta a risolvere il problema.

Esempio di programmazione 2

In questo esempio di programmazione, useremo il campo bit per consumare memoria per la variabile.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#includere
Data della struttura // Definizione del tipo di dati definito dall'utente.

Insigned Int D: 5; // Membro dati del tipo di dati della data.
Insigned Int M: 4; // usando il campo bit come colon:
non firmato int y;
;
int main ()

Struttura Data D1 = 22, 1, 2016; // La variabile del tipo di data viene dichiarata e inizializzata.
printf ("dimensione di d1 è %d", sizeof (d1));
restituzione 0;

Produzione:

Spiegazione

Sappiamo che il valore di D è sempre da 1 a 31. Un anno contiene 12 mesi. Quindi, il valore di inizializzazione della variabile del mese, M, è un massimo di 12. Siamo in grado di gestire lo spazio extra con l'aiuto dei campi bit.

Esempio migliorato

Byte di memoria singola

[4 byte]

Il blocco di memoria viene creato multipli di 4 byte.

La variabile D1 di tipo "data" prende 8 byte su un compilatore, mentre un numero intero non firmato prende 4 byte.

Esempio di programmazione 3

Vedremo un altro esempio di consumo di memoria senza usare un campo bit.

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
#includere
struct tm

Insigned Int HRS;
Insigned Int Min;
Insigned Int Sec;
;
int main ()

struct tm t = 11, 30, 10; // Dichiarazione di una variabile di tipo definito dall'utente.
printf ("Il tempo è %d: %d: %d \ n", t.hrs, t.menta.sec);
printf ("La dimensione dell'orologio = %ld byte.\ n ", sizeof (struct tm));
restituzione 0;

Produzione

Spiegazione

Dal precedente calcolo della data, stiamo cercando di dire che per rappresentare i secondi massimi in un'ora (60), è necessaria solo una memoria a 6 bit su 4 byte o 32 bit. È lo stesso anche nel caso di contare i minuti. Ci sono 60 minuti in un'ora. Per rappresentare 60 nella memoria, ci vogliono solo 5 bit su 4 byte o 32 bit. Quindi, da questa percezione è chiaro che il resto della memoria sia sprecato nel caso del giorno e del mese in una data. Questo problema sarà risolto con l'aiuto del campo bit.

Esempio di programmazione 4

Qui, possiamo vedere un'altra applicazione di bit campi.

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
#includere
struct tm

Insigned Int HRS: 8;
Insigned Int Min: 10;
Insigned Int Sec: 10;
;
int main ()

struct tm t = 11, 30, 10; // Dichiarazione di una variabile di tipo definito dall'utente.
printf ("Il tempo è %d: %d: %d \ n", t.hrs, t.menta.sec);
printf ("La dimensione dell'orologio = %ld byte.\ n ", sizeof (struct tm));
restituzione 0;

Produzione

Spiegazione

In questo esempio di programmazione, utilizziamo il campo bit per consumare memoria. Come vediamo dall'esempio, useremo il campo BIT (:) Dopo aver dichiarato ogni membro dei dati del tipo di dati temporale, cercando di consumare bit in una posizione di memoria. Di conseguenza, vedremo dalla memoria di output viene consumato.

Conclusione

Dalla dichiarazione precedente, è evidente che dobbiamo usare il campo bit per gestire la complessità dello spazio nella lingua C. Il campo bit ci aiuta a rimuovere un'allocazione di memoria sprecata extra dalla memoria per gestire la complessità dello spazio. Quindi, dobbiamo usare il campo bit in modo molto consapevole in cui è richiesto. Altrimenti, i dati possono essere sprecati.