例如:15 二进制为: 0000 1111
就返回4 个 1
我之前写过一篇用c语言,返回二进制参数1的个数:https://blog.csdn.net/question_mark/article/details/99637263
方法一:采用模2除2
11在内存中的存储是二进制:0000 0000 0000 0000 0000 0000 0000 1011
11%2=1
再将11/2(也可以看成二进制数右移一位)
11/2=5 其二进制:0000 0000 0000 0000 0000 0000 0000 0101
5%2=1
此时再将 5/2(再进行了一次右移动)
得到2 其二进制: 0000 0000 0000 0000 0000 0000 0000 0010
2%2=0
再将2/2(又进行了一次右移动)
得到1 其二进制:0000 0000 0000 0000 0000 0000 0000 0001
1%2=1
再将1/2 得到0 二进制:0000 0000 0000 0000 0000 0000 0000 0000
二进制中再无1,结束判断
可知11的二进制中1的个数有3个
具体实现代码如下:
public class CountOneBits {
public static int countOneBits(int num){
int count=0;
while(num>0){
if(num%2==1){
count