Latest web development tutorials

campos de bits C

Si la estructura del programa contiene más de un sólo variables verdadero / falso digitales, de la siguiente manera:

struct
{
  unsigned int widthValidated;
  unsigned int heightValidated;
} status;

Esta configuración requiere 8 bytes de espacio de memoria, pero de hecho, en cada variable, sólo almacenar 0 o 1. En este caso, C lenguaje proporciona un mejor uso de espacio de memoria en el camino. Si se utiliza una variable como dentro de la estructura, se puede definir el ancho de la variable para indicar al compilador que va a utilizar sólo los bytes. Por ejemplo, la estructura anterior se puede reescribir como:

struct
{
  unsigned int widthValidated : 1;
  unsigned int heightValidated : 1;
} status;

Ahora, la estructura anterior, variable de estado ocupa cuatro bytes de memoria, pero sólo dos se utilizan para almacenar valores. Si utiliza 32 variables, cada una anchura variable de uno, entonces la estructura de estado se utilizan 4 bytes, pero más, siempre y cuando se utiliza una variable, si se utiliza 33 variables, que estará bajo una sección de memoria asignada los primeros 33 variables se almacenan, esta vez para empezar a usar 8 bytes. Veamos los siguientes ejemplos para entender este concepto:

#include <stdio.h>
#include <string.h>

/* 定义简单的结构 */
struct
{
  unsigned int widthValidated;
  unsigned int heightValidated;
} status1;

/* 定义位域结构 */
struct
{
  unsigned int widthValidated : 1;
  unsigned int heightValidated : 1;
} status2;
 
int main( )
{
   printf( "Memory size occupied by status1 : %d\n", sizeof(status1));
   printf( "Memory size occupied by status2 : %d\n", sizeof(status2));

   return 0;
}

Cuando el código se compila y ejecuta, produce los siguientes resultados:

Memory size occupied by status1 : 8
Memory size occupied by status2 : 4

declaración de campo de bits

En el campo de bits declaración de la estructura es la siguiente:

struct
{
  type [member_name] : width ;
};

La siguiente es una descripción del elemento variable de bits:

元素描述
type整数类型,决定了如何解释位域的值。类型可以是整型、有符号整型、无符号整型。
member_name位域的名称。
width位域中位的数量。宽度必须小于或等于指定类型的位宽度。

Las variables con ancho predefinido se llamaun campo de bits.Los campos de bits se pueden almacenar más de un número, por ejemplo, necesita una variable para almacenar el valor de 0 a 7, se puede definir una anchura de tres campos de bits de la siguiente manera:

struct
{
  unsigned int age : 3;
} Age;

Definición de la estructura encima de las direcciones compilador de C, edad sólo utilizará tres variables para almacenar este valor, si se intenta utilizar más de tres, no se puede completar. Veamos los siguientes ejemplos:

#include <stdio.h>
#include <string.h>

struct
{
  unsigned int age : 3;
} Age;

int main( )
{
   Age.age = 4;
   printf( "Sizeof( Age ) : %d\n", sizeof(Age) );
   printf( "Age.age : %d\n", Age.age );

   Age.age = 7;
   printf( "Age.age : %d\n", Age.age );

   Age.age = 8;
   printf( "Age.age : %d\n", Age.age );

   return 0;
}

Cuando se compila el código anterior, llevará una advertencia, cuando se ejecuta el código anterior, producirá los siguientes resultados:

Sizeof( Age ) : 4
Age.age : 4
Age.age : 7
Age.age : 0