码迷,mamicode.com
首页 > 编程语言 > 详细

算法基础练习-_03 1的个数

时间:2021-02-18 13:03:18      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:tag   exti   can   算法基础   oid   位运算   next   练习   out   

请实现一一个函数,输入一个整数,输出该数二进制表示中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日

算法基础练习-_03 1的个数

标签:tag   exti   can   算法基础   oid   位运算   next   练习   out   

原文地址:https://www.cnblogs.com/btlord/p/14404282.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!