32 비트 레지스터에서 2 번째, 5 번째 및 6 번째 비트를 읽으려고합니다. 구조체 비트 필드를 사용하여 저장하기로 결정했습니다. 다음 데이터 구조가 정확합니까?H/W 레지스터에서 읽기위한 비트 필드
struct readData
{
int unwanted:1;
int reqbit1:1;
int unwanted1:2;
int reqbit2:2;
int unwanted2:26;
};
비트 필드가 어떻게 생성되는지 잘 모르겠습니다. h/w 레지스터의 바이트를이 구조체에 직접 복사하는 API를 사용할 것입니다. 이 경우 reqbit1에는 2 번째 비트가 포함됩니까? 내 이해에 따라 컴파일러는 첫 번째 비트를 int 변수에 할당하고 두 번째 비트는 다른 int 변수에 할당되므로 reqbit1에는 레지스터에서 읽은 데이터가 없습니다. 이 상황에서 다음 노조가 더 적합하지 않습니까?
union readData
{
struct readBits{
bool unwanted:1;
bool reqbit1:1;
xxx unwanted1:2;
short reqbit2:2;
xxx unwanted2:26;
};
int regValue;
};
이 경우 싫어하는 2는 무엇으로 선언해야합니까?
일반적으로 1 비트 부호있는 비트 필드를 사용하는 것은 대단히 바람직하지 않습니다. 거기에 저장할 수있는 값은'-1' 또는'0' 일 뿐이며, 혼란 스럽습니다. 그들에게 서명하지 말 것. – unwind
@unwind 만약 모든 int를 내 구조체에서 unsigned int로 변경했다면 괜찮습니까? 나는 노동 조합을 이용하여 등기부에서 읽을 필요가 없습니까? – linuxfreak