http://www.cnblogs.com/graphics/archive/2010/06/21/1752421.html
意给定一个32位无符号整数n,求n的二进制表示中1的个数,比如n = 5(0101)时,返回2,n = 15(1111)时,返回4
解法一:除余法
每次除二,看是否为奇数,是的话就累计加一,最后这个结果就是二进制表示中1的个数。
解法二:使用位运算
解法三:快速法
此法一张纸 一只笔 举例说明即可明白...
如果n的二进制表示中有k个1,那么这个方法只需要循环k次即可。
解法四:使用分支操作
switch(){
//....
}
此法写起来过于繁琐
另外 <<编程之美>> 上说法是错误的
下面红色方框使其错误的说法:
因为switch经过编译器优化后 本身就是一种查表机制 所以是不用比较255次的
关于switch语句原理: http://tieba.baidu.com/p/1842030715
解法一:除余法
每次除二,看是否为奇数,是的话就累计加一,最后这个结果就是二进制表示中1的个数。

解法二:使用位运算

解法三:快速法

此法一张纸 一只笔 举例说明即可明白...
如果n的二进制表示中有k个1,那么这个方法只需要循环k次即可。
解法四:使用分支操作
switch(){
//....
}
此法写起来过于繁琐
另外 <<编程之美>> 上说法是错误的
下面红色方框使其错误的说法:

因为switch经过编译器优化后 本身就是一种查表机制 所以是不用比较255次的
关于switch语句原理: http://tieba.baidu.com/p/1842030715