programing

구조 선언의 콜론은 :1, :7, :16 또는 :32와 같이 무엇을 의미합니까?

bestcode 2022. 8. 17. 23:49
반응형

구조 선언의 콜론은 :1, :7, :16 또는 :32와 같이 무엇을 의미합니까?

다음 C++ 코드는 무엇을 의미합니까?

unsigned char a : 1; 
unsigned char b : 7;

두 개의 문자 a와 b가 생성되고 둘 다 1바이트가 되어야 하는데, ": 1"과 ": 7" 부분이 어떤 역할을 하는지 모르겠습니다.

1과 7은 값의 범위를 제한하는 비트 크기입니다.그들은 전형적으로 건물과 조합에서 발견됩니다.예를 들어 일부 시스템에서는 (에 따라 다름)char폭 및 포장 규칙 등) 코드:

typedef struct {
    unsigned char a : 1;
    unsigned char b : 7;
} tOneAndSevenBits;

8비트 값을 만듭니다.a및 7비트의 경우b.

일반적으로 C에서 8비트 문자의 상위 절반에 포함되는 4비트 Nyble 등의 "압축된" 값에 액세스하기 위해 사용됩니다.

typedef struct {
    unsigned char leftFour  : 4;
    unsigned char rightFour : 4;
} tTwoNybbles;

언어변호사에 대해서는 C++11 규격의 9.6항이 이를 약간 바꿔서 자세히 설명하고 있습니다.


비트필드[클래스]비트]

형식의 회원 선언자

identifieropt attribute-specifieropt : constant-information

비트필드를 지정합니다.비트필드의 길이는 콜론으로 비트필드 이름에서 설정됩니다.옵션의 attribute-specifier는 선언되는 엔티티에 관련됩니다.비트필드 속성은 클래스 멤버 유형의 일부가 아닙니다.

상수식은 0 이상의 값을 갖는 정수식이어야 한다.정수식의 값은 비트필드 유형의 객체 표현에 포함된 비트 수보다 클 수 있습니다.이 경우 추가 비트는 패딩 비트로 사용되며 비트 필드의 값 표현에는 참여하지 않습니다.

클래스 오브젝트 내의 비트필드 할당은 구현 정의됩니다.비트 필드의 정렬은 구현 정의됩니다.비트 필드는 주소 지정 가능한 할당 단위로 패킹됩니다.

주의: 비트필드는 할당 유닛에 따라서는 다른 머신에서는 사용할 수 없습니다.비트 필드는 일부 컴퓨터에서는 오른쪽에서 왼쪽으로, 다른 컴퓨터에서는 왼쪽에서 오른쪽으로 할당됩니다. - end note

비트필드가 될 것 같아요

엄밀히 말하면 비트필드는 int, 부호 없는 int 또는 _Bool이어야 합니다.그러나 대부분의 컴파일러는 모든 유형의 컴파일러를 사용합니다.

참조 C11 6.7.2.1:

비트필드에는 _Bool, signed int, unsigned int 또는 기타 구현 정의 유형의 적격 또는 부적격 버전이 있어야 합니다.

컴파일러는 1바이트의 스토리지를 할당할 수 있지만, 그 이상의 스토리지는 자유롭게 취득할 수 있습니다.

참조 C11 6.7.2.1:

구현에서는 비트필드를 유지할 수 있을 만큼 충분히 큰 주소 지정 가능한 스토리지 유닛을 할당할 수 있습니다.

여러 비트필드가 연속해서 선언되었을 때 절약됩니다.이 경우 할당된 스토리지는 가능하면 꽉 차게 됩니다.

참조 C11 6.7.2.1:

충분한 공간이 남아 있을 경우 구조물 내의 다른 비트필드 바로 뒤에 있는 비트필드는 동일한 유닛의 인접 비트로 채워져야 한다.공간이 부족할 경우 맞지 않는 비트필드가 다음 유닛에 배치되거나 인접 유닛에 겹치는지 여부가 구현 정의됩니다.

언급URL : https://stackoverflow.com/questions/1604968/what-does-a-colon-in-a-struct-declaration-mean-such-as-1-7-16-or-32

반응형