O melhor tutorial campos de bits C em 2024. Neste tutorial você pode aprender declaração de campo Bit,

campos de bits C

Se a estrutura do programa contém mais de um variáveis ​​únicos verdadeiros / falsos digitais, como segue:

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

Esta configuração requer 8 bytes de espaço de memória, mas, na verdade, em cada variável, só armazenar 0 ou 1. Neste caso, a linguagem C fornece uma melhor utilização do espaço de memória da forma. Se você usar um tal variável dentro da estrutura, você pode definir a largura da variável para dizer ao compilador que você vai usar apenas os bytes. Por exemplo, a estrutura acima pode ser reescrita como:

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

Agora, a estrutura acima, variável de estado ocupa quatro bytes de memória, mas apenas dois são usados ​​para armazenar valores. Se você usa 32 variáveis, cada uma largura variável de um, então a estrutura de estado irá usar 4 bytes, mas mais contanto que você usar uma variável, se você usar 33 variáveis, que vai estar em uma seção de memória alocada os primeiros 33 variáveis ​​são armazenadas, desta vez para começar a usar 8 bytes. Vejamos os seguintes exemplos para entender esse conceito:

#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;
}

Quando o código acima é compilado e executado, ele produz os seguintes resultados:

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

declaração de campo Bit

No campo de bits declaração de estrutura é a seguinte:

struct
{
  type [member_name] : width ;
};

O que se segue é uma descrição do elemento variável de campo de bit:

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

As variáveis com largura pré-definida é chamadoum campo de bits.Campos de bits pode armazenar mais de um número, por exemplo, precisa de uma variável para armazenar o valor de 0 a 7, você pode definir uma largura de três campos de bits da seguinte forma:

struct
{
  unsigned int age : 3;
} Age;

Definição da estrutura acima do compilador C direções, idade só vai usar três variáveis ​​para armazenar este valor, se você tentar usar mais de três, você não pode concluir. Vamos olhar para os exemplos a seguir:

#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;
}

Quando o código acima é compilado, ele vai levar um aviso, quando o código acima é executado, ele irá produzir os seguintes resultados:

Sizeof( Age ) : 4
Age.age : 4
Age.age : 7
Age.age : 0
campos de bits C
10/30