剑指offer——Day21 位运算(简单)

Day21 2023.2.3 位运算(简单)

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

自己实现

这个题最简单的做法很容易理解,就是执行while(n!=0)循环,然后在循环中n>>=1,并判断如果n&1==1那么就要对计数器加一

代码如下

class Solution {
public:
    int hammingWeight(uint32_t n) {
        int cnt=0;
        while(n!=0){
            if(n&1)cnt++;
            n>>=1;
        }
        return cnt;
    }
};

代码表现

题解

巧用n&(n-1)。由下图可知,每一次通过n&(n-1)都能找到最右边的1并将其转化为0,通过这个方法能够快速锁定每个1的位置并将其转换

代码表现

hint

  • 这种n&(n-1)的做法值得积累

剑指Offer 65. 不用加减乘除做加法

自己实现

wtf。。。这怎么做,看题解了

题解

大体来说是用&, <<, ^(异或)操作来分别实现进位加法和不进位加法

代码如下:(由于C++会有左移得小问题,所以用java来写的)

class Solution {
    public int add(int a, int b) {
        while(b!=0){
            int c = (a&b)<<1;
            a^=b;
            b=c;
        }
        return a;
    }
}

代码表现

hint

  • 这种使用位运算实现加法的方法也值得积累
posted @ 2023-02-03 12:50  神鹏佐佑  阅读(38)  评论(0)    收藏  举报