面试题十五:二进制中1的个数
方法一:位运算 整数与1做&运算,整数右移循环。但是遇到负数会出现死循环;
方法二:位运算 整数与1做&运算,1左移循环;
int f1(int n){
int count=0;
int t=1;
while(t!=0){
if(t&n==1)
count++;
t<<=1;
}
return count;
}
方法三:减一法 将整数减去1后,在二进制中从右到左第一个1变0,左边不变,右边变1,结果再和原先整数于起来,循环;
int f2(int n){ int count=0; while(n!=0){ count++; n&=(n-1); } }
浪波激泥

浙公网安备 33010602011771号