分治法求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’的个数。
见《高效程序的奥秘》