elements of programming interviews in java第25页举了一个关于计算int类型在二进制下1的个数的问题,这里根据书上的方法写了代码,没有做过多少测试用例,只能说理论上应该是对的
问题描述
给定一个int类型数字x,计算其在二进制下1的个数
方案1
使用1作为掩码进行 and 运算,每次运算后将x进行右移操作
public int mehtod_1(int x){
int mask_num=1;
int count=0;
for(int i=0;i<32;i++){
if((x&mask_num)!=0){
count++;
}
x>>>=1;
}
return count;
}
书中给出的代码如下,更好些
public static short countBitsCint x) {
short numBits = 0;
while (x != 0) {
numBits += (x & 1);
X »>= 1;
}
return numBits;
}
方案2
每次使用x和x-1进行 and 运算,此时会去掉最右边的1,直到x等于0结束
理解:当x-1时,最右边1变为0且其右边均为1,如100变为011,此时再与原数 and 运算必然全部设为0
public int mehtod_2(int x){
int count=0;
while(x!=0){
x=x&(x-1);
count++;
}
return count;
}
注:
使用>>>为无符号右移
使用>> 为有符号右移
这一篇笔记主要还是用来熟悉下java里的按位操作,以后忘了可以来看看~