Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Linguagem C

C - Campos de bits


Suponha que seu programa C contenha um número de variáveis ​​TRUE/FALSE agrupadas em uma estrutura chamada status, como segue −
struct {
   unsigned int widthValidated;
   unsigned int heightValidated;
} status;

Essa estrutura requer 8 bytes de espaço de memória, mas na verdade vamos armazenar 0 ou 1 em cada uma das variáveis. A linguagem de programação C oferece uma maneira melhor de utilizar o espaço de memória em tais situações.

Se você estiver usando essas variáveis ​​dentro de uma estrutura, poderá definir a largura de uma variável que informa ao compilador C que você usará apenas esse número de bytes. Por exemplo, a estrutura acima pode ser reescrita da seguinte forma -
struct {
   unsigned int widthValidated : 1;
   unsigned int heightValidated : 1;
} status;

A estrutura acima requer 4 bytes de espaço de memória para a variável de status, mas apenas 2 bits serão usados ​​para armazenar os valores.

Se você usar até 32 variáveis, cada uma com largura de 1 bit, a estrutura de status também usará 4 bytes. No entanto, assim que você tiver 33 variáveis, ele alocará o próximo slot da memória e começará a usar 8 bytes. Vamos verificar o seguinte exemplo para entender o conceito -
Demonstração ao vivo
#include <stdio.h>
#include <string.h>

/* define simple structure */
struct {
   unsigned int widthValidated;
   unsigned int heightValidated;
} status1;

/* define a structure with bit fields */
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 o seguinte resultado -
Memory size occupied by status1 : 8
Memory size occupied by status2 : 4

Declaração de campo de bits


A declaração de um campo de bits tem a seguinte forma dentro de uma estrutura -
struct {
   type [member_name] : width ;
};

A tabela a seguir descreve os elementos variáveis ​​de um campo de bits -
Nº Sr. Elemento e descrição
1
tipo

Um tipo inteiro que determina como o valor de um campo de bits é interpretado. O tipo pode ser int, assinado int ou unsigned int.
2
nome_membro

O nome do campo de bits.
3
largura

O número de bits no campo de bits. A largura deve ser menor ou igual à largura de bits do tipo especificado.

As variáveis ​​definidas com uma largura predefinida são chamadas de campos de bits . Um campo de bits pode conter mais de um único bit; por exemplo, se você precisar de uma variável para armazenar um valor de 0 a 7, poderá definir um campo de bits com uma largura de 3 bits da seguinte maneira −
struct {
   unsigned int age : 3;
} Age;

A definição de estrutura acima instrui o compilador C que a variável age usará apenas 3 bits para armazenar o valor. Se você tentar usar mais de 3 bits, isso não permitirá que você faça isso. Vamos tentar o seguinte exemplo -
Demonstração ao vivo
#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 compilará com um aviso e, quando executado, produzirá o seguinte resultado -
Sizeof( Age ) : 4
Age.age : 4
Age.age : 7
Age.age : 0

Linguagem C

  1. Operadores C# Bitwise e Bit Shift
  2. Tipos de funções definidas pelo usuário na programação C
  3. Passar arrays para uma função em C
  4. Estruturas e ponteiros C
  5. Java esta palavra-chave
  6. Encapsulamento Java
  7. Estrutura C++ com exemplo
  8. C - Funções
  9. C - Argumentos Variáveis
  10. MATLAB - Integração