首页 > 其他 > 详细

二进制中1的个数

时间:2019-11-08 10:18:29      阅读:71      评论:0      收藏:0      [点我收藏+]

输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

 

解法一:循环次数为整数二进制的位数,32位的整数需要循环32次。

class Solution {
public:
     int  NumberOf1(int n) {
         int res = 0;
         unsigned int flag = 1;
         while(flag){
             if(n&flag){
                 res++;
             }
             flag = flag<<1;
         }
         return res;
     }
};

解法二:推荐解法,把一个整数减去1,再和原整数做与运算,会把该整数最右边的1变成0.则这个整数的二进制表示中有多少个1,就可以进行多少次这样的操作。

1100 - 1 = 1011

1100 & 1011 = 1000 (正好把最右边的1变为0了)

1000 - 1 = 0111

1000 & 0111 = 0 (最终得到1100中1的个数为 2)

class Solution {
public:
     int  NumberOf1(int n) {
         int res = 0;
         while(n){
             res++;
             n = n&(n-1);
         }
         return res;
     }
};

 

二进制中1的个数

原文:https://www.cnblogs.com/Bella2017/p/11818408.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!