位域

1.位域变量赋值

typedef struct
{
 char a : 2;
 char b : 2;
 char c : 1;
}test;

void test05(void)
{
 test t;
 t.a = 1;
 t.b = 3;
 t.c = 1;
 printf("%d,%d,%d\n",t.a,t.b,t.c);
}

int main(void)
{
 test05();
 return 0;
}

  输出 1       -1         -1

每个位域变量的最高位是符号位,比如   t.a占两位,t.a = 0b01,  符号位是0,所以输出1,
                  t.b占两位,t.b = 0b10, 符号位是1,输出-1
                  t.c占一位,只能输出0,或者-1
最好用unsigned修饰位域变量类型才能得到想要的值
 
2.通过位域给其他变量赋值
typedef struct
{
 unsigned char bit0 : 1;
 unsigned char bit1 : 1;
 unsigned char bit2 : 1;
 unsigned char bit3 : 1;
}test;
 void test05(void)
{
 unsigned char a = 0;
 test* bit = (test*)& a;//强制类型转换,通过指针改变地址内的变量
 bit->bit0 = 1;
 bit->bit1 = 1;
 bit->bit2 = 1;
 bit->bit3 = 1;
 printf("%x\n",a);
}
int main(void)
{
 test05();
 return 0;
}
输出  0xf
 
 
 
 
 
 
posted @ 2019-07-23 15:28  莫负年华向东流  阅读(182)  评论(0编辑  收藏  举报