题目真的非常简单,但越简单的地方,就越能看出一个人的功底,题目如下:
用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低位加。