이 섹션에서는 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비트 이상을 사용하려고 하면 그렇게 할 수 없습니다. 다음 예를 시도해 보겠습니다.
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; }
Sizeof( Age ) : 4 Age.age : 4 Age.age : 7 Age.age : 0
위 내용은 C의 비트 필드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!