/**
* 面试题15:二进制中1的个数
* 输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。
* @author
* @create 2021-03-17 12:12
*/
public class Solution15 {
public static void main(String[] args) {
int res = numberOf1another(-17);
//17:10101110;
// -17:以补码形式保存
// 原码:1000 0000 0000 0000 0000 0000 0001 0001
// 反码:1111 1111 1111 1111 1111 1111 1110 1110
// 补码:1111 1111 1111 1111 1111 1111 1110 1111
System.out.println(res);
}
/**
* 常规解法:把n与1做与运算判断n的最低位是否为1,再将1左移1位判断n的次低位是否为1
* @param n
* @return
*/
public static int numberOf1(int n){
int count = 0;
int flag = 1;
while (flag != 0){
if ((n & flag) != 0){
count++;
}
flag <<= 1;
}
return count;
}
/**
* 把一个整数减去1,再和原整数做与运算,会把该整数最右边的1变成0.
* 那么一个整数的二进制表示中有多少个1,就可以进行多少次这样的操作
* @param n
* @return
*/
public static int numberOf1another(int n){
int count = 0;
while (n != 0){
count++;
n = n & (n-1);
}
return count;
}
}
【剑指Offer】面试题15:二进制中1的个数
最新推荐文章于 2023-12-03 00:15:00 发布