Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1004074
  • 博文数量: 150
  • 博客积分: 3017
  • 博客等级: 少校
  • 技术积分: 3829
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-19 14:40
个人简介

Now in Baidu WISE team

文章分类

全部博文(150)

文章存档

2014年(8)

2013年(31)

2012年(111)

分类: C/C++

2012-10-22 13:00:19

在看《编程之美》的时候看到以下定义
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) |
给主人留下些什么吧!~~