O melhor tutorial campos de bits C em 2024. Neste tutorial você pode aprender declaração de campo Bit,
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
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