题解 | #二进制中1的个数#

二进制中1的个数

http://www.nowcoder.com/practice/8ee967e43c2c4ec193b040ea7fbb10b8

对于非负数,其补码就是其源码,若其为偶数则最右边一位为0,若其为基数则最右边一位为1,每次判断其奇偶性,并更改1的个数,然后将数字右移一位,直到数字为0。
对于负数,其补码为原码取反再加一,不好直接通过奇偶性统计1的个数,要先模拟该数变为补码的操作,所以先将其取绝对值,再转换为无符号类型unsigned,在对unsigned进行变为补码的操作,即取反再加一即可。

class Solution {
public:
     int  NumberOf1(int n) {
         else if(n >= 0){
             int count = 0;
             while(n){
                 if(n%2){
                     count++;
                 }
                 n = n >> 1;
             }
             return count;
         }
         else{
             n = abs(n);
             unsigned num = ~n;
             num++;
             int count = 0;
             while(num){
                 if(num%2){
                     count++;
                 }
                 num = num >> 1;
             }
             return count;
         }
     }
};
全部评论

相关推荐

zYvv:双一流加大加粗再标红,然后广投。主要是获奖荣誉不够,建议开始不用追求大厂,去别的厂子刷下实习。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务