C + + 비트 필드
클래스와 구조체는 정수 계열 형식 보다 적은 저장소 차지 하는 멤버를 포함할 수 있습니다.이러한 멤버가 비트 필드 이름으로 지정 됩니다.비트 필드에 대 한 구문은 멤버 선언 자가 사양은 다음과 같습니다:
declarator : constant-expression
설명
(옵션) declarator 되는 멤버는 프로그램에 액세스할 이름입니다.이 (열거 형식 포함)는 정수 계열 형식 이어야 합니다.해당 상수 식 구조에서 멤버를 차지 하는 비트 수를 지정 합니다.익명 비트 필드 즉, 비트 필드 멤버에 id가 없습니다-안쪽 여백에 사용할 수 있습니다.
[!참고]
비트 필드의 맞춤 옆에는 명명 되지 않은 비트 필드의 너비가 0 강제로 type 경계를 위치 type 멤버의 형식입니다.
다음 예제에서는 비트 필드를 포함 하는 구조체를 선언 합니다.
// bit_fields1.cpp
// compile with: /LD
struct Date {
unsigned short nWeekDay : 3; // 0..7 (3 bits)
unsigned short nMonthDay : 6; // 0..31 (6 bits)
unsigned short nMonth : 5; // 0..12 (5 bits)
unsigned short nYear : 8; // 0..100 (8 bits)
};
개념적 메모리 레이아웃 형식 개체의 Date 다음 그림에서 볼 수.
Date 개체의 메모리 레이아웃
참고 nYear 8 비트의 길이 고 단어 경계 선언 된 형식의 오버플로 부호 없는 short.따라서 새의 시작 부분에 시작 부호 없는 short.모든 필드를 하나의 개체의 내부 형식에 맞는 비트 필요는 없습니다. 선언에서 요청 하는 비트 수에 따라 저장소의 새로운 단위 할당 됩니다.
Microsoft 전용
데이터 비트 필드로 선언 순서에서 비트 낮은 높음, 위의 그림에 표시 된 대로입니다.
Microsoft 특정 끝
구조체 선언에 명명 되지 않은 필드의 길이 0, 다음 예제와 같이 포함 되어 있는 경우
// bit_fields2.cpp
// compile with: /LD
struct Date {
unsigned nWeekDay : 3; // 0..7 (3 bits)
unsigned nMonthDay : 6; // 0..31 (6 bits)
unsigned : 0; // Force alignment to next boundary.
unsigned nMonth : 5; // 0..12 (5 bits)
unsigned nYear : 8; // 0..100 (8 bits)
};
다음 그림에 표시 된 메모리 레이아웃이입니다.
길이가 0 인 비트 필드 가진 날짜 개체의 레이아웃
설명에 따라 비트 필드의 기본 형식을 정수 계열 형식 이어야 합니다 기본 형식.