题目描述:
输入一个整数,求该整数的二进制表达中有多少个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 }