本文主要是介绍求无符号整数二进制表示中1的个数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
简单粗暴的方法:
和1取与,计数然后移位。
int OnesNumber(unsigned int n)
{int count = 0;while(n!=0){ if(n&1==1)//末尾是否为1count++;n=n>>1;//移位}return count;
}
快速法:
思想:n相当于在n-1的最低位加上1.n&(n-1)相当于清除了n的最低位的1.
8(1000)= 7(0111)+ 1(0001),所以8 & 7 = (1000)&(0111)= 0(0000)
7(0111)= 6(0110)+ 1(0001),所以7 & 6 = (0111)&(0110)= 6(0110)
int onesNumber(int n)
{int count=0;for(;n;count++){ n=n&(n-1);}return count;
}
不断清除n最右边1,同时累加计数直到n=0.
这篇关于求无符号整数二进制表示中1的个数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!