题目描述
请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。
解题思路
我一开始的想法是直接递归求解,即每一次都取余并处以2,将余数和下一次递归的值加起来就是二进制的结果,哪能想到输入的数据就是二进制表示的。。。。于是数组越界了,此处有个问题,**它是二进制表示的int类型数据,为什么我用一个int类型数据接收后计算除法是会越界的?**暂时不太理解,但官方解答中是用的位操作,通过和1的&操作加上移位来进行到达目的,这个解法不难理解,但是我对位操作不熟悉,所以最后会补上java位操作的相关知识。
代码
这是官方解答之一:
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
int res = 0;
while(n != 0) {
res += n & 1;
n >>>= 1;
}
return res;
}
}
这是我写的递归求解函数(只适用于10进制表达时求二进制中的1个数):
public int get_col(int n){
if(n==1){
return 1;
}
int t=n%2;
return t+get_col((n-t)/2);
}
java位操作学习
就小小的看了一下。。。。
学了点基础信息,如果有看到这并想仔细学一学的点这个点我学习位操作
我也插眼记录一下,有需要再来取~