二进制中1的个数
问题描述:输入一个整数,输出该数二进制表示中1的个数
首先本题可以用很多种算法求解,这里提供两种,一种常规方法,一种具有技巧性。
本方法思想:
方法1:通过与1做与运算实现判断,做一次,右移一次,这样直到最后为0时,可以判断一共有多少个1。这种算法在负数的情况下可能会出现死循环。
方法2:把一个整数减去1之后再和原来的整数做位与运算,得到的结果相当于把整数的二进制表示中最右边的1变为了0。
例如101与100最终结果是100,1010与1001最终结果是1000,这样当结果为0时就可以直到一共有多少个1了。具有一定的技巧性。
持续更新...
代码附下
Java实现:
package 二进制中1的个数;
/**
* 输入一个整数,输出该数二进制表示中1的个数
* @author user
*
*/
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
int n = 5;
System.out.println(numofOne(n));
System.out.println(numofOne2(n));
}
// 方法1
// 通过与1做与运算实现判断,做一次,右移一次
private static int numofOne(int n) {
// TODO Auto-generated method stub
int count = 0;
while (n > 0) {
if ((n & 1) == 1) {
count++;
}
n = (n >> 1);
}
return count;
}
// 方法2 完美
// 把一个整数减去1之后再和原来的整数做位与运算,得到的结果相当于把整数的二进制表示中最右边的1变为了0
private static int numofOne2(int n) {
// TODO Auto-generated method stub
int count = 0;
while (n > 0) {
n = n & (n - 1);
count++;
}
return count;
}
}
持续更新...欢迎赞赏!
https://blog.csdn.net/ustcer_93lk/article/details/80369918
如果有问题,欢迎大家留言,有更好的方法也期待大家告知。