다음 코드를 실행할 때 이상한 동작을 관찰하고 있습니다. 구조체를 사용하여 bitfield를 만들면 52 비트를 사용하므로 long int를 사용합니다. long int의 크기는 시스템에서 64 비트이며 코드 내부에서 확인합니다. 어떻게 든 하나의 비트를 설정하려고하면 alwas가 2 비트를 설정합니다. 그들 중 하나가 제가 설정하고 싶었던 것이고 두 번째 것은 첫 번째 플러스 32의 인덱스입니다. 칸 아무나 말해줘, 왜 그거야?struct에서 long int를 사용하는 bitfields 이상한 동작
8
0
32
: 내 질문이 basicly 이해할 수 없었다, 그래서#include <stdio.h>
typedef struct foo {
long int x:52;
long int:12;
};
int main(){
struct foo test;
int index=0;
printf("%ld\n",sizeof(test));
while(index<64){
if(test.x & (1<<index))
printf("%i\n",index);
index++;
}
test.x=1;
index=0;
while(index<64){
if(test.x & (1<<index))
printf("%i\n",index);
index++;
}
return 0;
}
SRY가, 출력을 게시하는 것을 잊었다 ... 그것은 나를 준다 출력은 다음과 같다
게시 한 코드의 동작이 정의되지 않았습니다. (초기화하기 전에'test.x'에 접근합니다.) 그래서 어떤 일이 일어날 수 있습니다. –