位域
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修饰位域变量类型才能得到想要的值
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;
{
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;
}
{
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