剑指office--------二进制中1的个数

Posted 生活待我如初恋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指office--------二进制中1的个数相关的知识,希望对你有一定的参考价值。

题目描述

输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。
 
 
 
思路1:常规解法,位运算
 1 class Solution {
 2 public:
 3      int  NumberOf1(int n) {
 4          int ans=0;
 5          int index=1;
 6          while (index!=0){
 7              if (n&index)    ans++;
 8              index<<=1;
 9          }
10          return ans;
11      }
12 };

 

 

思路2:利用二进制特点

 

 1 class Solution {
 2 public:
 3      int  NumberOf1(int n) {
 4          int count=0;
 5          while (n){
 6              count++;
 7              n=(n-1)&n;
 8          }
 9          return count;
10      }
11 };

 

n-1是将   二进制n中的最右的1变成0的操作   ,例如    101000     减去1    的   100111

(n-1)&n     则是消除最右边的1的操作              101000 & 100111  =  100000

即每操作一次就可以消除一个1。

 

用这个方法也可解下列问题

 

 

问题1:   判定一个整数是否是2的整数次方        

 

    如果是2的整数次方,那么其的二进制只有一个1,   即:if((n-1)&n==0)  printf("YES\n");

 

问题2:   两个整数n与m,问最少要改变多少个数字(对其二进制操作),可以使n与m相等。

    

    先对n与m取异或。在统计有多少个1即可。

 

以上是关于剑指office--------二进制中1的个数的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer--15二进制中1的个数

剑指 Offer 15. 二进制中1的个数

《剑指offer》 二进制中1的个数

剑指 Offer 15. 二进制中1的个数

剑指 Offer 精选剑指 Offer II 003. 前 n 个数字二进制中 1 的个数

剑指offer-10.求一个数中二进制格式中1的个数