【算法基础】(一)基础算法 --- 位运算

请添加图片描述

✨个人主页:bit me
✨当前专栏:算法基础
专栏简介:该专栏主要更新一些基础算法题,有参加蓝桥杯等算法题竞赛或者正在刷题的铁汁们可以关注一下,互相监督打卡学习

二 进 制 中 1 的 个 数

给定一个长度为 n 的数列,请你求出数列中每个数的二进制表示中 1 的个数。

输入格式:

第一行包含整数 n 。
第二行包含 n 个整数,表示整个数列。

输出格式:

共一行,包含 n 个整数,其中的第 i 个数表示数列中的第 i 个数的二进制表示中 1 的个数。

数据范围:

1 ≤ n ≤ 100000 , 0 ≤ 数列中元素的值 ≤ 10 ^ 9

输入样例:

5
1 2 3 4 5

输出样例:

1 1 2 1 2

思路:

  1. 在这里面其实涉及到的就是原码,反码,补码还有对位运算符的一些综合运用
  2. 这里涉及到 lowbit(x) 的方法,就是返回 x 中(二进制)的最后一位 1,x & (~x + 1)
import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();

        while(n -- > 0){
            int x = scan.nextInt();
            int count = 0 ;
            while(x != 0){
                //这里是用二进制进行减等于二进制
                x -= lowbit(x);
                count++;
            }
            System.out.print(count + " ");
        }
    }
    
    public static int lowbit(int x){
        return x & -x;//返回二进制的最后一个1
    }
}

在 Java 中也有统计二进制个数封装在jdk中:

import java.io.BufferedInputStream;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(new BufferedInputStream(System.in));
        int n = scanner.nextInt();
        for(int i = 0 ; i < n ;i++ ![请添加图片描述](https://img-blog.csdnimg.cn/5a4d4f31633f48e3a6b8f62847abea23.gif)
) {
            System.out.print(Integer.bitCount(scanner.nextInt())+" ");          
        }
        scanner.close();
    }
}

你可能感兴趣的:(算法基础,算法,蓝桥杯,java)