方法1:
判断这个是是不是奇数,如果是,计数+1,再把这个数右移1位。
循环的执行次数等于这个二进制数的长度。
long num1 = 259l;
int n1 = 0;
while (num1>0) {
n1 += num1&1;
num1>>=1;
}
方法二:
num&(num-1)和num相比,1的个数会少一个,再把num&(num-1)重新赋值给num,1的个数等于重新赋值的次数。
long num2 = 259l;
int n2 = 0;
int count2 = 0;
do {
count2++;
n2++;
} while ((num2 = (num2 & (num2-1))) > 0);
相关文章
- 剑指Offer面试题10(Java版):二进制中的1的个数
- 求一个数的所有因子
- 【因子算法】——求一个数的因子、质因子、求两个数的公因子
- 求一个数的因子个数
- 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
- 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字的最小的一个
- 给一个正整数 n, 找到若干个完全平方数(比如1, 4, 9, ... )使得他们的和等于 n。你需要让平方数的个数最少。
- 把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
- 把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
- 一个数如果恰好等于它的因子之和,这个数就称为“完数“。例如,6的因子1,2,3而6 = 1+2+3,因此6是完数。编程序找出1000之内的所有完数