在看《编程之美》的时候看到以下定义
struct{
unsigned char a:4;
unsigned char b:4;
} i;
本来unsiged char的长度是1 byte,两个合起来就是2byte.但是根据题意这个struct长度是1 byte.
搜了一下,原来后面的:4定义了一个field的长度。
曾经在做那个protocol相关的项目时,看到了很多类似的东西,一直没深究。现在明白原来是这个意思。
相当于对于a来说,占用4 bit,后面紧跟着b也占用4bit.
在读取的时候 i.a就是将前4位按char读,i.b是读后四位。当然,这里unsigned char改成int之类对长度也是没影响的,影响的只是读的行为。
这个位域的行为非常的好,在做一些算法题的时候,牵涉用某一位表示一个东西,就需要位操作。当需要的数据长度短于int,然后又需要将几个连起来,弄起来就非常的麻烦。有了这个东西,就方便多了。
曾经同事谈到过一个symbian的面试题,意思是给定一个二进制串,查找它是否在目标串中出现。或许可以用这个东西解决。
阅读(1073) | 评论(0) | 转发(0) |