码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-07-30 14:53:41      阅读:85      评论:0      收藏:0      [点我收藏+]

标签:des   解法   amp   span   --   利用   str   solution   div   

题目描述

输入一个整数,输出该数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的个数

标签:des   解法   amp   span   --   利用   str   solution   div   

原文地址:https://www.cnblogs.com/q1204675546/p/13402956.html

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