package com.dume.server.face;
/**
* 给定一个int 数字,要求计算出int数字对应的二进制中1的个数
*/
public class Digit {
public static void main(String[] args) {
int num =123456;
System.out.println(countA(num));
System.out.println(countB(num));
System.out.println(countC(num));
}
/**
* 方法1:一个个位数判断与1相与操作,
* 与操作遵照:全1则1,否则为0原则
* 然后原数字无符号右移一位,最高位补0
* @param num
* @return
*/
public static int countA(int num){
int count = 0;
while(num!=0){
count += num & 1;
num>>>=1;
}
return count;
}
/**
* 方法2:每次减去1得到新数,新数的得到:是原数字2进制的右边第一个0变成1,然后右边第一个1变成0
* 新数与原数相与就会把右边第一个1变成0;
* 然后 count++ 成功统计到一个1
* 直到全为 0 停止
* @param num
* @return
*/
public static int countB(int num){
int count = 0;
while(num!=0){
num = num & (num-1);
count++;
}
return count;
}
/**
* 方法3:这个算是最直接,最有效的方法,不再解释。
* @param num
* @return
*/
public static int countC(int num){
int count = 0;
while(num!=0){
count += (num%2);
num >>=1;
}
return count;
}
}
给定一个int 数字,要求计算出int数字对应的二进制中1的个数
最新推荐文章于 2024-09-04 11:15:45 发布