直接看程序吧:

#include <stdio.h>

struct filter
{
unsigned int fl_low:10; //max = 1023
unsigned int fl_hig:10; //max = 1023
};

const struct filter lookup_fl[] = { {0x371,0x2f2},{0x3b1,0x3f5}}; //0xbcb71 0xFD7B1

int main(void)
{
struct filter m1;
m1.fl_hig = 1024;// 溢出 低 10位为0
m1.fl_low = 1;
printf("sizeof(struct filter) = %d.\n", sizeof(struct filter));
printf("m1 = %d.\n", m1);
printf("lookup_fl[0] = 0x%x.\n", lookup_fl[0]);//可以看到C语言是把低10位和高10位拼接起来的。
printf("lookup_fl[0].fl_hig = 0x%x.\n", lookup_fl[0].fl_hig);
printf("lookup_fl[0].fl_low = 0x%x.\n", lookup_fl[0].fl_low);
printf("lookup_fl[1] = 0x%x.\n", lookup_fl[1]);//可以看到C语言是把低10位和高10位拼接起来的,在内存中是连续的
printf("lookup_fl[1].fl_hig = 0x%x.\n", lookup_fl[1].fl_hig);
printf("lookup_fl[1].fl_low = 0x%x.\n", lookup_fl[1].fl_low);
return 0;
}

运行结果:

 

简单解释,这里我定义了2个10bit的变量作为一个结构体数据类型,分别打印了在内存中占用的字节数,4字节(32位系统),以及低字节和高字节,以及溢出的时候,

值是多少,从上门我们可以看到C语言是把低10位和高10位拼接起来的,在内存中是连续的。

意义:以后可以用位域结合位运算符来执行相关的位操作了。

    欢迎和我讨论,转贴请注明出处,谢谢。

      -------------------cofin_add

posted on 2017-05-05 11:27  洋葱洋葱  阅读(454)  评论(0编辑  收藏  举报