"Coding Interview Guide" -- 整数的二进制表达中有多少个1

题目

  给定一个32位整数n,可为0,可为正,也可为负,返回该整数二进制表达式中1的个数

分析

  按位与(&)操作可以充当掩码的作用,即,可以屏蔽某些位

  对整数n每次进行无符号右移1位,并检查最后一位是否为1来进行统计该整数二进制表达式中1的个数

方法一:

 1 public int binaryOneNum(int num)
 2 {
 3     int res = 0;          // 记录num二进制表达式中1的个数
 4     while(num != 0)
 5     {
 6       res += num & 1;    // 根据最后一位是否为1来更新res
 7       num >>>= 1;       // 无符号右移1位
 8     }
 9 
10     return res;
11 }    

方法二:

 1 public int binaryNum(int num)
 2 {
 3     int res = 0;
 4 
 5     while(num != 0)
 6     {
 7       num &= (num - 1);      
 8       res++;
 9     }
10 
11     return res;
12 }

方法三:

 1 public int binaryNum(int num)
 2 {
 3     int res = 0;
 4 
 5     while(num != 0)
 6     {    
 7       num = num - (num & (~num + 1));    
 8       res++;
 9     }
10 
11     return res;
12 }

来源:左程云老师《程序员代码面试指南》

原文地址:https://www.cnblogs.com/OoycyoO/p/10901609.html