임 비트 필드의 동작에 대해 좀 더 이해하려고 노력 중입니다.C에서 비트 필드를 포함하는 구조 초기화하기
다음 코드를 감안할 때 : 를 그리고 가정 INT가 32 비트
#include <stdio.h>
int main()
{
struct byte
{
int one:1;
};
struct byte var = {3};
printf("%d\n", var.one);
printf("%#x\n", var);
return 0;
}
내가 얻을 출력은이 :
-1 0x1
그러나 내가보기 위해 기다리고 있었다 :
-1 0x3
이후
struct byte var = {3};
은 int의 4 바이트에 값 3을 할당합니다. 그렇지 않습니까?
실제로 위 코드 줄이 1 비트 필드에 값 3을 저장하려고 시도하는 것처럼 보입니다. 따라서 0x1
을 두 번째 출력 줄로 인쇄하십시오.
그래서 제 질문은 다음과 같습니다
는방법은 전체 구조에 이러한 초기화와 할당이 작동합니까?
또한 {}
은 왜 필요합니까? 이와
왜 그렇게 생각하십니까? 할당 할 1 비트 너비의 필드가 있습니다. 컴파일러는 여분의 비트를 유지할 의무가 없습니다. –
@JonathanGrynspan 그것을 지적 해 주셔서 감사합니다. 그러나 컴파일러가 나머지 비트를 무시할 경우 각 비트 필드의 형식을 지정해야하는 이유는 무엇입니까? – pablorg
'struct byte {TYPE var : 1; };'(unsigned) int/char'와 다른 타입을 사용합니다. 아마도 당신은 차이점을 발견 할 것입니다. –