方法一:
public class Main {
public static void main(String[] args) {
long a = 17L
System.out.println(Long.bitCount(a));
}
}
方法二:
public class Main {
public static int solution(long num) {
int count = 0;
while (num != 0) {
if (num != (num >>> 1) <<< 1) {
count++;
}
num = num >>> 1;
}
return count;
}
public static void main(String[] args) {
System.out.println(solution(17L));
}
}
使用位运算,将该数向右位移一位,这样就自动将该数字的二进制表示的最后一位舍弃掉。然后再将舍弃一位的数左移一位,这样恢复的数就是最后一位是0;当它和原先的数字比较时,如果相同,则表示原先舍弃的那位数字是0,不同则为1。不断重复该过程,统计1的个数直到改数变成0,则表示所有的1都已计算完毕
注:>>和>>>都是右移操作,但是不同的是>>>是右移后,左边补0,而>>的左边第一位是符号位
方法三:
public class Main {
public static int solution(long num) {
int count = 0;
while(num != 0){
count += num & 1;
num >>>= 1;
}
return count;
}
public static void main(String[] args) {
System.out.println(solution(17L));
}
}
使用1和num做“与”运算,如最后一位是0,则运算后依旧是0,如果是1,运算过后就是1,然后不断将num更新为右移之后的值,这样直到num等于0结束