Champs bits en c

Champs bits en c
La complexité de l'espace est le critère le plus important de la langue C. Nous étudions une langue pour développer un logiciel. La principale observation d'un produit est de gérer les données dans notre mémoire. Bit Field nous aide à gérer les données dans la langue C. Il nous aide à consommer moins de mémoire que son exigence. Dans cet article, nous discuterons du concept de champs de bits et de leur application.

Caractéristiques d'une variable

Les champs bits sont utilisés pour consommer efficacement la mémoire de telle manière que nous gérons notre espace mémoire de manière en douceur.

Il peut également être utilisé dans la structure et l'union.

Comment implémenter un peu de champ dans le programme C

1
2
3
4
5
6
7
8
9
dix
11
date de structure

ints non signé;
intm non signé;
non signé dans;
;

Explication

La variable de type, «Date», prend 12 octets sur un compilateur qui sont de 32 bits sur un compilateur 64 bits, tandis que «Date» prend 6 octets sur un compilateur qui sont de 16 bits.

64 bits

d1
d m y
22 1 2016
4 octets 4 octets 4 octets
= 12 octets

32 bits

d1
d m y
22 1 2016
2 octets 2 octets 2 octets
= 6 octets

Comment réduire la taille d'une variable dans un programme

Exemple de programmation 1

Dans cet exemple de programmation, nous verrons quelle quantité de mémoire est consommée par tout type de variable.

1
2
3
4
5
6
7
8
9
dix
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#inclure
Date de structure // Définition du type de données défini par l'utilisateur.

ints non signé; // membre de données du type de données de date.
intm non signé;
non signé en t y;
;
int main ()

Date de structure D1 = 22, 1, 2016; // La variable de type date est déclarée et initialisée.
printf ("taille de d1 est% d", sizeof (d1));
retour 0;

Sortir

Explication

Les valeurs de la date et du mois sont fixes: la date est de 31, et le mois est 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 bits) (4 bits)

À partir du calcul précédent de la date, nous essayons de dire que pour représenter une journée maximale en un mois (31), seulement 5 bits de mémoire sont requis sur 4 octets ou 32 bits. C'est la même chose aussi dans le cas du comptage des mois. Il y a 12 mois par an. Pour représenter 12 dans la mémoire, il ne prend que 4 bits sur 4 octets ou 32 bits. Ainsi, il ressort clairement de cette perception que le reste de la mémoire est gaspillé en cas de jour et de mois à une date. Dans cette situation, le champ Bit nous aide à résoudre le problème.

Exemple de programmation 2

Dans cet exemple de programmation, nous utiliserons le champ Bit pour consommer de la mémoire pour la variable.

1
2
3
4
5
6
7
8
9
dix
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#inclure
Date de structure // Définition du type de données défini par l'utilisateur.

Int d: 5 non signé; // membre de données du type de données de date.
Int m: 4 non signé; // Utilisation de Bit Field comme côlon:
non signé dans;
;
int main ()

Date de structure D1 = 22, 1, 2016; // La variable de type date est déclarée et initialisée.
printf ("taille de d1 est% d", sizeof (d1));
retour 0;

Sortir:

Explication

Nous savons que la valeur de D est toujours de 1 à 31. Un an contient 12 mois. Ainsi, la valeur d'initialisation de la variable du mois, m, est un maximum de 12. Nous pouvons gérer l'espace supplémentaire à l'aide de champs de bits.

Exemple amélioré

Octets de mémoire unique

[4 octets]

Le bloc de mémoire est créé plusieurs de 4 octets.

La variable D1 de type «date» prend 8 octets sur un compilateur, tandis qu'un entier non signé prend 4 octets.

Exemple de programmation 3

Nous verrons un autre exemple de consommation de mémoire sans utiliser un champ.

1
2
3
4
5
6
7
8
9
dix
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#inclure
struct tm

non signé int hrs;
non signé int min;
non signé int sec;
;
int main ()

struct tm t = 11, 30, 10; // Déclaration d'une variable de type défini par l'utilisateur.
printf ("Le temps est% d:% d:% d \ n", t.HRS, T.menthe.sec);
printf ("La taille de l'horloge =% ld octets.\ n ", sizeof (struct tm));
retour 0;

Sortir

Explication

À partir du calcul précédent de la date, nous essayons de dire que pour représenter les secondes maximales en une heure (60), seule une mémoire 6 bits est requise sur 4 octets ou 32 bits. C'est la même chose aussi en cas de comptage des minutes. Il y a 60 minutes dans une heure. Pour représenter 60 dans la mémoire, il ne prend que 5 bits sur 4 octets ou 32 bits. Donc, il ressort clairement de cette perception que le reste de la mémoire est gaspillé en cas de jour et de mois à une date. Ce problème sera résolu à l'aide du champ Bit.

Exemple de programmation 4

Ici, nous pouvons voir une autre application de champs bits.

1
2
3
4
5
6
7
8
9
dix
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#inclure
struct tm

non signé int h: 8;
Unsigned int min: 10;
non signé int sec: 10;
;
int main()

struct tm t = 11, 30, 10; // Déclaration d'une variable de type défini par l'utilisateur.
printf ("Le temps est% d:% d:% d \ n", t.HRS, T.menthe.sec);
printf ("La taille de l'horloge =% ld octets.\ n ", sizeof (struct tm));
retour 0;

Sortir

Explication

Dans cet exemple de programmation, nous utilisons un champ de bits pour consommer de la mémoire. Comme nous le voyons à partir de l'exemple, nous utiliserons le champ Bit (:) après avoir déclaré chaque membre de données du type de données Time, en essayant de consommer des bits dans un emplacement de mémoire. En conséquence, nous verrons dans la mémoire de sortie est consommée.

Conclusion

D'après la déclaration précédente, il est évident que nous devons utiliser le champ Bit pour gérer la complexité de l'espace dans la langue C. Le champ Bit nous aide à supprimer l'allocation de mémoire gaspillée supplémentaire de la mémoire pour gérer la complexité de l'espace. Donc, nous devons utiliser le champ Bit d'une manière très consciente où il est nécessaire. Sinon, les données peuvent être gaspillées.