剑指 offer acwing 26 二进制中1的个数 (位运算)

题面

在这里插入图片描述

题解

  1. int 和 unsigned int 的转换
int n = -2;
//二进制表示不变,值得含义发生变换,如果是有符号,还表示-2,如果是无符号,表示一个很大的数
unsigned int c = n;   //4294967294
int b = c;   //-2
  1. 二进制位运算
//返回x的最后一位1
int lowbit(int x) {
    
    
    return x & -x;
}

//求n的第k位数字(n是二进制数)
n >> k & 1 ;

代码

class Solution {
    
    
public:

    int lowbit(int x){
    
    
        return x&-x;
    }
    
    int NumberOf1(int _n) {
    
    
        
        unsigned int n=_n;
        
        int res=0;
        while(n) res++,n-=lowbit(n);
        
        return res;
        
    }
};

猜你喜欢

转载自blog.csdn.net/qq_44791484/article/details/114921114
今日推荐