结构体位域
#include
#include
typedef struct NUMBER
{
unsigned int a :7;
unsigned int b :9; 不能超过类型的宽度(32)
unsigned int c :8;
unsigned int d :8;
}Number;
typedef struct NUMBER_1
{
int a :7;
int b :9;
int c :8;
int d :8;
}Number_1;
int main()
{
Number n;
Number_1 n1;
int i=0x12345678;
memcpy(&n,&i,4);
memcpy(&n1,&i,4);
printf("%x %x %x %x %x\n",n,n.a,n.b,n.c,n.d);
printf("%d %d %d %d\n",n.a,n.b,n.c,n.d);
printf("%x %x %x %x %x\n",n1,n1.a,n1.b,n1.c,n1.d);
printf("%d %d %d %d\n",n1.a,n1.b,n1.c,n1.d);
return 0;
}
输出结果:
12345678 78 ac 34 12
120 172 52 18
12345678 fffffff8 ac 34 12
-8 172 52 18
0x 1 2 3 4 5 6 7 8低字节 从低字节开始分配,并不是从低地址
0001 0010 0011 0100 0101 0110 0111 1000
N.a=111 1000 0x78
N.b=0101 0110 0 =>0 1010 1100 0x0ac
N1.a=111 1000 =>1111 1111 1111 1111 1111 1111 1111 1000 0xfffffff8 -8
N1.b=0 1010 1100 => 0000 0000 0000 0000 0000 0000 1010 1100 0xac 172