哪位高手能帮忙解释一下这段程序的原理吗

谁能帮忙解释一下这段程序的原理吗?
int   bits_set(int   word)
{
int   tmp;
tmp   =   (work> > 1)&033333333333;
tmp   =   word   -   tmp   -   ((tmp> > 1)&033333333333);
return(((tmp   +(tmp> > 3))&030707070707)%077);
}

此程序的功能是输入一个整数,然后判断这个整数的二进制表示下有多少个1.
请帮忙解释一下程序的原理,还有最后一个%077有什么用
谢谢大家

------解决方案--------------------
Hacker 's delight
先以2bits为一组计算1的个数,放在这2bits中;
再以4bits为一组,计算相邻的两组2bits的1的个数;
再以8bits为一组,计算相邻的两组4bits的1的个数,以次类推。
如下所示:
10 11 11 00 01 10 00 11 01 11 11 10 11 11 11 11
01|10|10|00|01|01|00|10|01|10|10|01|10|10|10|10
00 11|00 01|00 10|00 10|00 11|00 11|01 00|01 00
00 00 01 00|00 00 01 00|00 00 01 10|00 01 00 00
00 00 00 00 00 00 10 01|00 00 00 00 00 00 11 10
00 00 00 00 00 00 00 00 00 00 00 00 00 01 01 11

C程序:
x=x&0x55555555 + (x> > 1)&0x55555555;
x=x&0x33333333 + (x> > 2)&0x33333333;
x=x&0x0F0F0F0F + (x> > 4)&0x0F0F0F0F;
x=x&0x00FF00FF + (x> > 8)&0x00FF00FF;
x=x&0x0000FFFF + (x> > 16)&0x0000FFFF;

copy from jingya_feng

有些类似,参考参考吧^_^
------解决方案--------------------
用分治法减低循环累加强度之后,结果就是这样.....
把原本一位一位计算的东西,变成了并行计算.再展开.