Pola bitowe w C

Pola bitowe w C
Złożoność przestrzeni jest najważniejszym kryterium w języku C. Studiujemy język, aby opracować dowolne oprogramowanie. Główną obserwacją produktu jest zarządzanie danymi w naszej pamięci. Pole bitowe pomaga nam zarządzać danymi w języku C. Pomaga nam spożywać pamięć mniej niż jej wymagania. W tym artykule omówimy koncepcję pól bitowych i ich zastosowania.

Charakterystyka zmiennej

Pola bitowe są używane do wydajnego konsumpcji pamięci w taki sposób, abyśmy zarządzali naszą przestrzenią pamięci w gładko.

Może być również używany w strukturze i zjednoczeniu.

Jak wdrożyć pole bitowe w programie C

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

niepodpisany int d;
niepodpisany int m;
niepodpisany int y;
;

Wyjaśnienie

Zmienna typu, „data”, bierze 12 bajtów na kompilator, który ma 32 bity na 64-bitowym kompilatorze, podczas gdy „data” bierze 6 bajtów na kompilator, który ma 16 bitów.

64 bity

D1
D M y
22 1 2016
4 bajty 4 bajty 4 bajty
= 12 bajtów

32 bity

D1
D M y
22 1 2016
2 bajty 2 bajty 2 bajty
= 6 bajtów

Jak zmniejszyć rozmiar zmiennej w programie

Przykład programowania 1

W tym przykładzie programowania zobaczymy, jaka ilość pamięci jest zużywana przez dowolny rodzaj zmiennej.

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
#włączać
Data struktury // Definiowanie typu danych zdefiniowanych przez użytkownika.

niepodpisany int d; // Członek danych typu danych daty.
niepodpisany int m;
niepodpisany w t y;
;
int main ()

Data struktury d1 = 22, 1, 2016; // Zmienna typu daty jest zadeklarowana i inicjowana.
printf („Rozmiar D1 to %d”, rozmiar (d1));
powrót 0;

Wyjście

Wyjaśnienie

Wartości daty i miesiąca są ustalone: ​​data to 31, a miesiąc to 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ów) (4 bity)

Po poprzednim obliczeniu daty staramy się powiedzieć, że aby reprezentować maksymalny dzień w miesiącu (31), wymagane jest tylko 5 bitów pamięci z 4 bajtów lub 32 bitów. Tak samo jest również w przypadku liczenia miesięcy. Jest 12 miesięcy w roku. Aby reprezentować 12 w pamięci, potrzeba tylko 4 bitów z 4 bajtów lub 32 bitów. Zatem z tego przekonania jasno wynika, że ​​reszta pamięci jest zmarnowana w przypadku dnia i miesiąca w dniu. W tej sytuacji pole bitowe pomaga nam rozwiązać problem.

Przykład programowania 2

W tym przykładzie programowania użyjemy pola bitowego do konsumpcji pamięci dla zmiennej.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#włączać
Data struktury // Definiowanie typu danych zdefiniowanych przez użytkownika.

niepodpisany int d: 5; // Członek danych typu danych daty.
niepodpisany int m: 4; // Używanie pola bitowego jako okrężnicy:
niepodpisany int y;
;
int main ()

Data struktury d1 = 22, 1, 2016; // Zmienna typu daty jest zadeklarowana i inicjowana.
printf („Rozmiar D1 to %d”, rozmiar (d1));
powrót 0;

Wyjście:

Wyjaśnienie

Wiemy, że wartość D wynosi zawsze od 1 do 31. Jeden rok zawiera 12 miesięcy. Tak więc wartość inicjalizacji zmiennej miesiąca, m, wynosi maksymalnie 12. Możemy poradzić sobie z dodatkową przestrzenią za pomocą pól bitowych.

Ulepszony przykład

Bajty z pojedynczą pamięcią

[4 bajty]

Blok pamięci jest tworzony wiele z 4 bajtów.

Zmienna D1 typu „data” bierze 8 bajtów na kompilator, podczas gdy liczba całkowita niepodpisana bierze 4 bajty.

Przykład programowania 3

Zobaczymy kolejny przykład zużycia pamięci bez użycia pola bitowego.

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
#włączać
struct tm

niepodpisane int HRS;
niepodpisany int min;
niepodpisany ints;
;
int main ()

struct tm t = 11, 30, 10; // deklaracja zmiennej typu zdefiniowanego przez użytkownika.
printf („Czas to %d: %d: %d \ n”, t.Hrs, t.Mennica.sec);
printf („Rozmiar zegara = %bajtów.\ n ", sizeof (struct tm));
powrót 0;

Wyjście

Wyjaśnienie

Po poprzednim obliczeniu daty staramy się powiedzieć, że aby przedstawić maksymalne sekundy w godzinach (60), wymagana jest tylko 6-bitowa pamięć z 4 bajtów lub 32 bitów. Tak samo jest również w przypadku liczenia minut. Jest 60 minut na godzinę. Aby reprezentować 60 w pamięci, potrzeba tylko 5 bitów z 4 bajtów lub 32 bitów. Z tego przekonania jasno wynika, że ​​reszta pamięci jest zmarnowana w przypadku dnia i miesiąca na datę. Ten problem zostanie rozwiązany za pomocą pola bitowego.

Przykład programowania 4

Tutaj możemy zobaczyć kolejne zastosowanie pól bitowych.

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
#włączać
struct tm

niepodpisany int HRS: 8;
niepodpisany int min: 10;
Unsigned Int Sec: 10;
;
int main ()

struct tm t = 11, 30, 10; // deklaracja zmiennej typu zdefiniowanego przez użytkownika.
printf („Czas to %d: %d: %d \ n”, t.Hrs, t.Mennica.sec);
printf („Rozmiar zegara = %bajtów.\ n ", sizeof (struct tm));
powrót 0;

Wyjście

Wyjaśnienie

W tym przykładzie programowania używamy pola bitowego do konsumpcji pamięci. Jak widzimy z przykładu, użyjemy pola bit (:). W rezultacie zobaczymy z konsumpcji pamięci wyjściowej.

Wniosek

Z poprzedniej deklaracji widać, że musimy użyć pola bitowego, aby zarządzać złożonością przestrzeni w języku C. Pole bitowe pomaga nam usunąć dodatkową zmarnowaną przydział pamięci z pamięci w celu zarządzania złożonością przestrzeni. Musimy więc użyć pola bitowego w bardzo świadomy sposób, w którym jest to wymagane. W przeciwnym razie dane mogą zostać zmarnowane.