c语言 位域 赋值 问题

结构体位域

#include<stdio.h>

#include<string.h>

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


展开阅读全文

没有更多推荐了,返回首页