>  기사  >  백엔드 개발  >  C의 비트 필드

C의 비트 필드

WBOY
WBOY앞으로
2023-09-08 22:57:031404검색

C의 비트 필드

이 섹션에서는 C 언어의 비트 필드가 무엇인지 이해하겠습니다.

C 프로그램에 다음과 같이 state라는 구조로 그룹화된 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비트만 사용합니다.

최대 32개의 변수를 사용하는 경우 각 변수의 폭은 1비트이므로 상태 구조도 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</p><p>", sizeof(status1));
   printf( "Memory size occupied by status2 : %d</p><p>", sizeof(status2));
   return 0;
}

출력

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

비트필드 선언:

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

struct {
   type [member_name] : width ;
};

다음 표에서는 비트필드에 대해 설명합니다. 변수 요소 -

요소 설명 th>
유형 은 비트 필드 값의 정수 유형이 해석되는 방식을 결정합니다. 유형은 int, signed int 또는 unsigned int일 수 있습니다.
member_name 비트 필드의 이름입니다.
Width 비트 필드의 자릿수입니다. 너비는 지정된 유형의 비트 너비보다 작거나 같아야 합니다.

미리 정의된 너비로 정의된 변수를 비트필드라고 합니다. 비트 필드는 여러 비트를 보유할 수 있습니다. 예를 들어 0에서 7까지의 값을 저장하는 변수가 필요한 경우 아래와 같이 너비가 3비트인 비트 필드를 정의할 수 있습니다.

struct {
   unsigned int age : 3;
} Age;

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

Sample Code

Live Demonstration

#include <stdio.h>
#include <string.h>
struct {
   unsigned int age : 3;
} Age;
int main( ) {
   Age.age = 4;
   printf( "Sizeof( Age ) : %d</p><p>", sizeof(Age) );
   printf( "Age.age : %d</p><p>", Age.age );
   Age.age = 7;
   printf( "Age.age : %d</p><p>", Age.age );
   Age.age = 8;
   printf( "Age.age : %d</p><p>", Age.age );
   return 0;
}

Output

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

위 내용은 C의 비트 필드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제