您的位置:首页 > 编程语言

编程之美--2.1 求二进制数中1的个数

2014-08-11 22:36 267 查看
解答

1 直接考虑每位模2 和1比

public static int method1(byte input){
int ans = 0;
while(input !=0){
if(input %2 !=0){
ans ++;
}
input/=2;

}
return ans;
}

2 考虑用位来操作,直接使用右移和0x01与。

2.1 注意移位的写法。java对byte的数学操作都会先转换成int。所以强制转换,右移也要用无符号的,并且计算前先要和0xff与,表示作为int前三字节设为0

public static int method2(byte input){
int ans =0;
while(input!=0){
ans += input & 0x01;
input =(byte)((input&0xff)>>>1);

}
return ans;
}

3 注意到X&(X-1)的规律。

public static int method3(byte input){
int ans =0;
while(input!=0){
input = (byte)(input&(input-1));
ans++;
}
return ans;
}

4 用空间换时间的算法,要么case,要么数组或者hash表。

拓展题

2 A异或B,得到数C有几个1就代表有几位不同,剩下的就是计算C有几位1。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息