Campos de bits en c

Campos de bits en c
La complejidad del espacio es el criterio más importante en el idioma C. Estudiamos un idioma para desarrollar cualquier software. La principal observación de un producto es administrar datos en nuestra memoria. Bit Field nos ayuda a administrar datos en el idioma C. Nos ayuda a consumir memoria menos que su requisito. En este artículo, discutiremos el concepto de campos de bits y su aplicación.

Características de una variable

Los campos de bit se utilizan para consumir memoria de manera eficiente de tal manera que administramos nuestro espacio de memoria de manera suave.

Se puede usar en estructura y unión también.

Cómo implementar un campo un poco en el programa C

1
2
3
4
5
6
7
8
9
10
11
Fecha de estructura

sin firmar int d;
Unsigned int m;
Unsigned int y;
;

Explicación

La variable de tipo, "Fecha", toma 12 bytes en un compilador que tiene 32 bits en un compilador de 64 bits, mientras que "Fecha" toma 6 bytes en un compilador que son de 16 bits.

64 bits

D1
d metro Y
22 1 2016
4 bytes 4 bytes 4 bytes
= 12 bytes

32 bits

D1
d metro Y
22 1 2016
2 bytes 2 bytes 2 bytes
= 6 bytes

Cómo reducir el tamaño de una variable en un programa

Programación Ejemplo 1

En este ejemplo de programación, veremos qué cantidad de memoria consume cualquier tipo de variable.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
dieciséis
17
18
19
20
21
22
23
24
25
#incluir
Fecha de estructura // Definición del tipo de datos definidos por el usuario.

sin firmar int d; // Data Miembro de la fecha Tipo de datos.
Unsigned int m;
sin firmar en t y;
;
int main ()

Fecha de estructura d1 = 22, 1, 2016; // La variable de tipo de fecha se declara e inicializa.
printf ("El tamaño de D1 es %D", sizeOf (D1));
regresar 0;

Producción

Explicación

Los valores de la fecha y el mes son fijos: la fecha es 31 y el mes es 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 del cálculo anterior de la fecha, estamos tratando de decir que para representar un día máximo en un mes (31), solo se requieren 5 bits de memoria de 4 bytes o 32 bits. Es lo mismo en el caso de contar meses. Hay 12 meses en un año. Para representar 12 en la memoria, solo se necesitan 4 bits de 4 bytes o 32 bits. Por lo tanto, está claro a partir de esta percepción que el resto de la memoria se desperdicia en el caso del día y el mes en una fecha. En esta situación, el campo de bits nos ayuda a resolver el problema.

Programación Ejemplo 2

En este ejemplo de programación, usaremos el campo Bit para consumir memoria para la variable.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
dieciséis
17
18
19
20
21
22
23
24
#incluir
Fecha de estructura // Definición del tipo de datos definidos por el usuario.

Unsigned int d: 5; // Data Miembro de la fecha Tipo de datos.
Unsigned int m: 4; // Usando el campo de bit como colon:
Unsigned int y;
;
int main ()

Fecha de estructura d1 = 22, 1, 2016; // La variable de tipo de fecha se declara e inicializa.
printf ("El tamaño de D1 es %D", sizeOf (D1));
regresar 0;

Producción:

Explicación

Sabemos que el valor de D es siempre del 1 al 31. Un año contiene 12 meses. Entonces, el valor de inicialización de la variable mes, M, es un máximo de 12. Podemos manejar el espacio adicional con la ayuda de los campos de bits.

Ejemplo mejorado

Bytes de memoria individual

[4 bytes]

El bloque de memoria se crea múltiples de 4 bytes.

La variable D1 de tipo "fecha" toma 8 bytes en un compilador, mientras que un entero sin firmar toma 4 bytes.

Programación Ejemplo 3

Veremos otro ejemplo de consumo de memoria sin usar un campo de bits.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
dieciséis
17
18
19
20
21
22
23
24
25
26
27
#incluir
estructura tm

Unsigned int hrs;
Unsigned int min;
Unsigned int Sec;
;
int main ()

struct tm t = 11, 30, 10; // Declaración de una variable de tipo definido por el usuario.
printf ("El tiempo es %d: %d: %d \ n", t.Hrs, t.menta.sec);
printf ("El tamaño de reloj = %ld bytes.\ n ", sizeof (struct tm));
regresar 0;

Producción

Explicación

A partir del cálculo anterior de la fecha, estamos tratando de decir que para representar los segundos máximos en una hora (60), solo se requiere una memoria de 6 bits de 4 bytes o 32 bits. Es lo mismo en el caso de contar las actas. Hay 60 minutos en una hora. Para representar 60 en la memoria, solo toma 5 bits de 4 bytes o 32 bits. Entonces, está claro a partir de esta percepción que el resto de la memoria se desperdicia en el caso del día y el mes en una fecha. Este problema se resolverá con la ayuda del campo de bits.

Programación Ejemplo 4

Aquí podemos ver otra aplicación de campos de bits.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
dieciséis
17
18
19
20
21
22
23
24
25
26
27
#incluir
estructura tm

Unsigned int hrs: 8;
Unsigned int min: 10;
Unsigned int Sec: 10;
;
int main ()

struct tm t = 11, 30, 10; // Declaración de una variable de tipo definido por el usuario.
printf ("El tiempo es %d: %d: %d \ n", t.Hrs, t.menta.sec);
printf ("El tamaño de reloj = %ld bytes.\ n ", sizeof (struct tm));
regresar 0;

Producción

Explicación

En este ejemplo de programación, usamos el campo Bit para consumir memoria. Como vemos en el ejemplo, usaremos el campo Bit (:) Después de declarar cada miembro de datos del tipo de datos de tiempo, intentando consumir bits en una ubicación de memoria. Como resultado, veremos que se consume la memoria de salida.

Conclusión

De la declaración anterior, es evidente que tenemos que usar el campo Bit para administrar la complejidad del espacio en el idioma C. Bit Field nos ayuda a eliminar la asignación de memoria adicional de desperdicio de la memoria para administrar la complejidad del espacio. Entonces, debemos usar el campo Bit de una manera muy consciente donde se requiere. De lo contrario, los datos pueden desperdiciarse.