位运算-输出该数字二进制表示中1的个数

1.问题描述:

   请实现一个函数,输入一个整数,输出该数字二进制表示中1的个数

2.思路分析

①可以通过位运算将一个数字进行二进制位数的运算,第一种方法是将1向左移n位,而且从低位开始往右移动

比如:1011011

从最右边的位开始移动,1移动的位数为从右边算起,移动n位,n从0开始,左移n位后的数字与原来的数字1011011进行与运算,保留了该位上的1,消除掉了其他的1,判断和1做移动n位的数字是否相同,假如相同那么该位数字上是1,计数变量加1,通过在循环中就可以实现

下面是代码实现:

import java.util.Scanner;
public class 一的个数 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int count = 0;
        //可以用来查看输入的数字转换成的二进制字符串
        System.out.println(Integer.toString(n, 2));
        for(int i = 0;i<32;i++){
            if((n&(1<<i))==(1<<i)){
                count++;
            }
        }
            System.out.println(count);

    }

}

扫描二维码关注公众号,回复: 2839323 查看本文章

② 第二种方法是数字往右移动至最低位与1进行与运算

 下面是代码实现:

 int count = 0;

 for(int i = 0;i<32;i++){
            if(((n>>>i)&1)==1){
                count++;
            }
        }
 System.out.println(count);

③ 第三种方法是通过每次循环中减去一个1与原来的数进行与运算,直至该数字变成0

 因为我们知道假如某一位减去一个1之后进行与运算,那么一定会消除掉该位上的1

 下面是代码实现:

 int count = 0;
 while(n!=0){
        n = (n - 1)&n;
        count++;
  }
System.out.println(count);

改方法也是消除1的方法

猜你喜欢

转载自blog.csdn.net/qq_39445165/article/details/81711308