산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

C - 비트 필드

C 프로그램에 다음과 같이 상태라는 구조로 그룹화된 여러 TRUE/FALSE 변수가 포함되어 있다고 가정합니다. -

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

이 구조에는 8바이트의 메모리 공간이 필요하지만 실제로는 각 변수에 0 또는 1을 저장할 것입니다. C 프로그래밍 언어는 이러한 상황에서 메모리 공간을 활용하는 더 나은 방법을 제공합니다.

구조 내에서 이러한 변수를 사용하는 경우 해당 바이트 수만 사용할 것임을 C 컴파일러에 알리는 변수의 너비를 정의할 수 있습니다. 예를 들어 위의 구조는 다음과 같이 다시 작성할 수 있습니다. -

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

위의 구조는 상태 변수에 대해 4바이트의 메모리 공간이 필요하지만 값을 저장하는 데 2비트만 사용됩니다.

각각 너비가 1비트인 최대 32개의 변수를 사용하는 경우 상태 구조도 4바이트를 사용합니다. 그러나 33개의 변수가 있는 즉시 메모리의 다음 슬롯을 할당하고 8바이트를 사용하기 시작합니다. 개념을 이해하기 위해 다음 예를 확인합시다 -

라이브 데모
#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;
}

위의 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다. -

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

비트 필드 선언

비트 필드의 선언은 구조체 내에서 다음과 같은 형식을 갖습니다 -

struct {
   type [member_name] : width ;
};

다음 표는 비트 필드의 변수 요소를 설명합니다 -

Sr.No. 요소 및 설명
1

유형

비트 필드 값이 해석되는 방식을 결정하는 정수 유형입니다. 유형은 int, signed int 또는 unsigned int일 수 있습니다.

2

구성원 이름

비트 필드의 이름입니다.

3

너비

비트 필드의 비트 수입니다. 너비는 지정된 유형의 비트 너비보다 작거나 같아야 합니다.

사전 정의된 너비로 정의된 변수를 비트 필드라고 합니다. . 비트 필드는 단일 비트 이상을 보유할 수 있습니다. 예를 들어, 0에서 7 사이의 값을 저장하기 위해 변수가 필요한 경우 다음과 같이 너비가 3비트인 비트 필드를 정의할 수 있습니다. -

struct {
   unsigned int age : 3;
} Age;

위의 구조 정의는 age 변수가 값을 저장하는 데 3비트만 사용할 것임을 C 컴파일러에 지시합니다. 3비트 이상을 사용하려고 하면 그렇게 할 수 없습니다. 다음 예를 시도해 보겠습니다 -

라이브 데모
#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;
}

위의 코드가 컴파일되면 경고와 함께 컴파일되고 실행되면 다음 결과가 생성됩니다. -

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

C 언어

  1. C# 비트 및 비트 시프트 연산자
  2. C 프로그래밍의 사용자 정의 함수 유형
  3. C의 함수에 배열 전달
  4. C 구조체와 포인터
  5. 자바 이 키워드
  6. 자바 캡슐화
  7. 예제가 있는 C++ 구조체
  8. C - 기능
  9. C - 변수 인수
  10. MATLAB - 통합