读书人

分治法求一的个数

发布时间: 2012-10-20 14:12:48 作者: rapoo

分治法求1的个数
假设 有一个8位数 求它里面1的个数。

记得之前在坛子里面看到过一个这样的算法,不记得了,谁知道 帮忙讲讲啊。

要用分治法



好像 要 n & 0x05050505
....
n &0xffffffff
这种解法谁还记得呀?

[解决办法]
http://hi.baidu.com/bshetlyijuaflxr/item/8e6585063386468b02ce1b99
[解决办法]
对于一个unsigned int x;
x=(x & 0x55555555)+((x & 0xaaaaaaaa)>>1);
x=(x & 0x33333333)+((x & 0xcccccccc)>>2);
x=(x & 0x0f0f0f0f)+((x & 0xf0f0f0f0)>>4);
x=(x & 0x00ff00ff)+((x & 0xff00ff00)>>8);
x=(x & 0x0000ffff)+((x & 0xffff0000)>>16);

x中就原x中‘1’的个数。
见《高效程序的奥秘》

读书人网 >C语言

热点推荐