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
- 这种使用位运算实现加法的方法也值得积累