T2 15. 二进制中1的个数
方一
根据 与运算 定义,设二进制数字 n ,则有:
- 若 n & 1 = 0,则 n 二进制 最右一位 为 0 ;
- 若 n & 1 = 1 ,则 n 二进制 最右一位 为 1 。
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
int res = 0;
while(n!=0){
if((n&1)==1) res++;
n >>>= 1; // “ >>> ”无符号右移位
}
return res;
}
}
方二
n&(n-1):判断n是否是2的幂二进制数字 n 最右边的1变成0 ,其余不变。
T2 65. 不用加减乘除做加法
无进位和 相当于 异或运算
进位 相当于 与运算
class Solution {
public int add(int a, int b) {
int c;
while(b!=0){
c = (a&b) <<1; //进位 a和b相与左移1位
a ^=b ; //无进位和 赋值给a
b = c;
}
return a;
}
}