*内存中存放的位补码即计算补码中的1的个数。
1.使用%和/
177%10=7--->得到十进制的最低位
177/10=17---->丢掉的最低位
同理
177%2----->得到二进制的最低位
177/2-------->丢掉的最低位
2.使用移位与按位操作符
&----按位与-->有0为0,两个都为1才是1
先使用右移操作符使a的二进制位向右移动i位,随着i的增加右移的位数逐渐增加即最低位随之改变。
再使用按位与操作符,与1按位与,1的二进制位只有最低位才有1 。a&1只有a的二进制最低位是1才能返回1(&两个都为1才是1)。返回判断是否等于1,如果等于则count加1.
3.只使用按位与操作符
通过a&(a-1)消除最右边的1,直至1变成0结束while循环。