Campos de bits em c

Campos de bits em c
A complexidade espacial é o critério mais importante na linguagem C. Estudamos um idioma para desenvolver qualquer software. A principal observação de um produto é gerenciar dados em nossa memória. Bit Field nos ajuda a gerenciar dados no idioma C. Ajuda -nos a consumir menos memória do que seu requisito. Neste artigo, discutiremos o conceito de campos de bits e sua aplicação.

Características de uma variável

Os campos de bits são usados ​​para consumir a memória com eficiência de forma que gerenciemos nosso espaço de memória de uma maneira suave.

Pode ser usado em estrutura e união também.

Como implementar um campo Bit no programa C

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

não assinado int d;
não assinado int m;
não assinado int y;
;

Explicação

A variável do tipo, "Date", pega 12 bytes em um compilador, que são 32 bits em um compilador de 64 bits, enquanto "data" pega 6 bytes em um compilador que são 16 bits.

64 bits

D1
d m y
22 1 2016
4 bytes 4 bytes 4 bytes
= 12 bytes

32 bits

D1
d m y
22 1 2016
2 bytes 2 bytes 2 bytes
= 6 bytes

Como reduzir o tamanho de uma variável em um programa

Exemplo de programação 1

Neste exemplo de programação, veremos qual quantidade de memória é consumida por qualquer tipo de variável.

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
#incluir
Data de estrutura // Definindo o tipo de dados definido pelo usuário.

não assinado int d; // Membro de dados do tipo de dados de data.
não assinado int m;
não assinado em t y;
;
int main ()

data data d1 = 22, 1, 2016; // A variável do tipo de data é declarada e inicializada.
printf ("tamanho de d1 é %d", sizeof (d1));
retornar 0;

Saída

Explicação

Os valores da data e mês são fixos: a data é 31 e o mês é 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)

A partir do cálculo anterior da data, estamos tentando dizer que, para representar um dia máximo em um mês (31), apenas 5 bits de memória são necessários em 4 bytes ou 32 bits. É o mesmo também no caso de contagem de meses. Há 12 meses em um ano. Para representar 12 na memória, leva apenas 4 bits em 4 bytes ou 32 bits. Assim, fica claro a partir dessa percepção que o restante da memória é desperdiçado no caso do dia e do mês em uma data. Nesta situação, o campo de bits nos ajuda a resolver o problema.

Exemplo de programação 2

Neste exemplo de programação, usaremos o campo de bits para consumir memória para a variável.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#incluir
Data de estrutura // Definindo o tipo de dados definido pelo usuário.

não assinado int d: 5; // Membro de dados do tipo de dados de data.
não assinado int m: 4; // Usando o campo de bits como cólon:
não assinado int y;
;
int main ()

data data d1 = 22, 1, 2016; // A variável do tipo de data é declarada e inicializada.
printf ("tamanho de d1 é %d", sizeof (d1));
retornar 0;

Saída:

Explicação

Sabemos que o valor de D é sempre de 1 a 31. Um ano contém 12 meses. Portanto, o valor de inicialização da variável do mês, M, é um máximo de 12. Podemos lidar com o espaço extra com a ajuda de campos de bits.

Exemplo aprimorado

Bytes de memória única

[4 bytes]

O bloco de memória é criado múltiplo de 4 bytes.

A variável d1 do tipo "data" pega 8 bytes em um compilador, enquanto um número inteiro não assinado pega 4 bytes.

Exemplo de programação 3

Veremos outro exemplo de consumo de memória sem usar um campo de um 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
#incluir
estrutura tm

não assinado int hrs;
não assinado int min;
não assinado int sec;
;
int main ()

struct tm t = 11, 30, 10; // Declaração de uma variável de tipo definido pelo usuário.
printf ("O tempo é %d: %d: %d \ n", t.hrs, t.hortelã.sec);
printf ("O tamanho do relógio = %ld bytes.\ n ", sizeof (struct tm));
retornar 0;

Saída

Explicação

A partir do cálculo anterior da data, estamos tentando dizer que, para representar o máximo de segundos em uma hora (60), apenas uma memória de 6 bits é necessária em 4 bytes ou 32 bits. É o mesmo também no caso de contar a ata. Há 60 minutos em uma hora. Para representar 60 na memória, leva apenas 5 bits em 4 bytes ou 32 bits. Portanto, fica claro a partir dessa percepção que o restante da memória é desperdiçado no caso do dia e do mês em uma data. Este problema será resolvido com a ajuda do campo de bits.

Exemplo de programação 4

Aqui, podemos ver outra aplicação de campos de bits.

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
#incluir
estrutura tm

não assinado int hrs: 8;
não assinado int min: 10;
não assinado int sec: 10;
;
int main ()

struct tm t = 11, 30, 10; // Declaração de uma variável de tipo definido pelo usuário.
printf ("O tempo é %d: %d: %d \ n", t.hrs, t.hortelã.sec);
printf ("O tamanho do relógio = %ld bytes.\ n ", sizeof (struct tm));
retornar 0;

Saída

Explicação

Neste exemplo de programação, usamos o campo de bits para consumir memória. Como vemos no exemplo, usaremos o campo de bits (:) Depois de declarar todos os dados do tipo de dados do tempo, tentando consumir bits em um local de memória. Como resultado, veremos a memória de saída é consumida.

Conclusão

A partir da declaração anterior, é evidente que precisamos usar o campo de bits para gerenciar a complexidade do espaço na linguagem C. Bit Field nos ajuda a remover a alocação de memória desperdiçada extra da memória para gerenciar a complexidade do espaço. Então, devemos usar o campo de bit de uma maneira muito consciente, onde é necessário. Caso contrário, os dados podem ser desperdiçados.