剑指 Offer 15. 二进制中1的个数
给定的一定是一个32为的二进制数,所以用循环计算每一位即可
class Solution {
public:
int hammingWeight(uint32_t n) {
int ans=0;
for(int i=0;i<32;i++){
ans+=(n>>i&1);
}
return ans;
}
};
剑指 Offer 65. 不用加减乘除做加法
本题需要通过异或和与或来计算,01,10,00的异或结果可以直接取,11的异或结果需要进位,因此采用与或然后右移,这里需要注意一点,左移右移运算不能移动负数未,所以需要强制转换成无符号数
class Solution {
public:
int add(int a, int b) {
while(b != 0) { // 当进位为 0 时跳出
int c =((unsigned int)(a&b)<<1); // c = 进位
a ^= b; // a = 非进位和
b = c; // b = 进位
}
return a;
}
};