2014-09-09 2 views
-2
#include <string.h> 
#include <malloc.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <memory.h> 

typedef struct AA { 
    int a1:5; 
    int a2:2; 
} AA; 

int main() { 
    AA aa; 
    char cc[100]; 
    strcpy(cc, ""); 
    memcpy(&aa, cc, sizeof(AA)); 
    printf("%d\n", aa.a1); 
    printf("%d\n", aa.a2); 
    return 0; 
} 

은 내가 sizeof(AA)sizeof(int)4 바이트에 해당하고, aa"0123"를 복사 한 후 진수가비트 필드가있는 구조체에서 어떤 비트가 사용됩니까?

00110011,00110010,00110001,00110000 
    3   2  1   0 

입니다하지만 난 비트 a1:5 또는 a2:2을있는 이해하지 못하는 것을 알고 뜻?

답변

3

비트 필드의 배열은 표준화되지 않았습니다.

결과에 따르면 a110000이고 a201입니다. 이것이 발생할 수있는 한 가지 방법은 이 cc[0]의 하위 5 비트이고 a2이 그 다음으로 낮은 2 비트 인 경우입니다.

즉, cc[0]00110000이고, 이는 0 01 10000으로 나눠진다.

값을 더 실험 해 본 사람은 컴파일러가 어떤 순서를 사용하고 있는지 확인할 수 있습니다.

관련 문제