计算一个二进制整数中有几个1
代码
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int i = scanner.nextInt();
System.out.println(Integer.toString(i,2));
int count = 0;
for (int j = 0; j < 32; j++) {
if ((i&(1<<j))==1<<j){
count++;
// System.out.println("i="+i);
// System.out.println("j="+j);
// System.out.println("1<<j="+(1<<j));
// System.out.println("count="+count);
}
}
System.out.println(count);
}
分析
首先使用Scanner获取用户输入
如果输入10
将10转换为二进制为1010
一个整数类型占用32位二进制,所以需要循环32次
在循环中将10与1<<向右移位进行与运算
即 (i&(1<<j))==1<<j)
当j==0时 1<<j为1
输入的i为10
10&1转换为二进制计算
1010 & 1 结果为0 与1<<j不相等
当j==1时 1<<j为2
输入的i为10
10&2转换为二进制计算
1010 & 10 结果为10 与1<<j的2转换为二进制10相等 则count+1
以此类推 可计算出一个二进制整数中有几个1