Chinaunix首页 | 论坛 | 博客
  • 博客访问: 462687
  • 博文数量: 206
  • 博客积分: 4030
  • 博客等级: 上校
  • 技术积分: 1852
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-29 15:33
文章分类

全部博文(206)

文章存档

2010年(44)

2009年(75)

2008年(87)

我的朋友

分类:

2008-04-07 10:43:04

题目真的非常简单,但越简单的地方,就越能看出一个人的功底,题目如下:

用C写一个函数,用来检查一个字节中有几个位被置了1
unsigned char func(unsigned char c)
{
……
}

题目到手的第一反应就是用循环,后来看到参考答案:

     c = (c&0xaa)>>1+(c&0x55);
     c = (c&0xcc)>>2+(c&0x33);
     c = (c&0xf0)>>4+(c&0x0f);

标准答案的处理流程如下:
先是用10101010取偶位和01010101取奇位加
再是用11001100取上次的和的偶位和00110011取奇位加
最后用11110000取上次的高位和00001111低位加。

阅读(597) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~