华为OJ平台——整数的二进制中1的个数

题目描述:

输入一个整数,求该整数的二进制表达中有多少个1。例如输入10,由于其二进制表示为1010,有两个1,因此输出2。

思路:

这是一道很基本的考查位运算的面试题。包括微软在内的很多公司都曾采用过这道题。注意考虑负数的情况(也是难点)

 1 import java.util.Scanner;
 2 
 3 /**
 4  * 输入一个整数,求该整数的二进制表达中有多少个1。
 5  * 例如输入10,由于其二进制表示为1010,有两个1,因此输出2。
 6  *
 7  */
 8 public class FindNumberOne {
 9 
10     public static void main(String[] args) {
11         // 输入读取参数
12         Scanner cin = new Scanner(System.in);
13         int n = cin.nextInt();
14         cin.close();
15         
16         System.out.println(findNumberOf1(n));
17 
18     }
19 
20     /**
21      * 主要采用位与(&)的方法来判断
22      * @param n
23      * @return
24      */
25     private static int findNumberOf1(int n) {
26         int count = 0;
27         //从最低位开始判断
28         int flag = 1;
29         while(flag != 0){
30             //通过位与判断该位是否为1
31             if((n & flag) != 0){
32                 count++ ;
33             }
34             //每次判断完之后flag左移一位,当左移到最后溢出后变为0,则退出循环
35             flag = flag<<1 ;
36         }
37         
38         return count;
39     }
40 
41 }
原文地址:https://www.cnblogs.com/mukekeheart/p/5594390.html