- 求一个二进制数中 1 的个数
class Soulution{
public:
int hammingWeight(uint32_t n) {
int ans = 0;
unsigned int flag = 1;
while(flag){
if(flag & n)
ans++;
flag <<= 1;
}
return ans;
}
}
- 判断一个数是不是 2 的幂,不可用循环语句
/*
这样的数转换为二进制是 10、100、1000。
如果 x 减 1 后与 x 做与运算,答案若是 0,
则 x 是 2 的 N 次方。
*/
!(x & (x-1))
不用加减乘除做加法
int add(int a, int b) {
while(b!=0){
int tmp=a^b;
b=((unsigned int)(a&b)<<1);
a=tmp;
}
return a;
}
- 找出两个术中最大的那个,不用判断语句
int nmax = ((a+b) - abs(a-b))/2;
- 不用任何中间变量,将 a, b 交换