zoukankan      html  css  js  c++  java
  • 算法基础练习-_03 1的个数

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

    例: 9的二进制表示为1001,有2位是1


    
    import java.util.Scanner;
    
    
    public class _03_1的个数 {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int N = sc.nextInt();
            System.out.println(Integer.toString(N, 2));
    
            int count = 0;
            //比对每一位,使比对的1向左移动
            for (int i = 0; i < 32; i++) {
                if ((N & (1 << i)) == (1 << i)) {
                    count++;
                }
            }
            System.out.println(count);
    
            //比对每一位,使需要比对的数字向右移
            count = 0;
            for (int i = 0; i < 32; i++) {
                if (((N >>> i) & 1) == 1)
                    count++;
            }
            System.out.println(count);
            //强大的解题方法,每次-1 and & 一次,就会消除1个二进制1
            count = 0;
            while (N != 0) {
                N = ((N - 1) & N);
                count++;
            }
            System.out.println(count);
        }
    
    }
    

    要点解析:

    1. Integer.toString(N, 2) 将N转换为2进制

    2. N = ((N - 1) & N); 将会消除从低位到高位的二进制1


    Tags:位运算

    2021年2月15日

  • 相关阅读:
    NUnit
    Fxcop
    msdeploy命令实现远程部署时保留指定文件
    virtualBox 创建新虚拟机
    sharepoint项目部署
    执行批处理文件
    NCover
    配置Web DashBoard
    ccnet+ncover+fxcop+web deploy+mstest
    命令行部署Reporting Services项目
  • 原文地址:https://www.cnblogs.com/btlord/p/14404282.html
Copyright © 2011-2022 走看看