题目:
Write a function that takes an unsigned integer and returns the number of ’1' bits it has (also known as the Hamming weight).
For example, the 32-bit integer ’11' has binary representation 00000000000000000000000000001011, so the function should return 3.
Answer:
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
int result = 0;
while(n != 0 ){
int bit = n & 1;
if(bit == 1)
result ++;
n>>>= 1;
}
return result;
}
}
思考:
1、java 没有 unsigned ,why, http://www.cnblogs.com/yuanyq/p/java_unsigned_types.html 这篇文章不错,都问到了java的设计者,一句话,简单。
2、对无符号的所以一开始考虑了很多问题,后来发现都没有用上,包括将其转换成long
long temp = n & 0x0FFFFFFFF
3、对于long , 定义long 的时候 要在最后加 L,否则是默认的int 奇怪我定义了long型的参数,传入 2的31次方,总是报错,不知道为什么。
4、Integer 自带将十进制转换成二进制字符串的方法,toBinaryString(int n) ,更加高能的是提供了此bitCount(int n) , 再次感觉到 java 已经封装的不行了,什么方法都已经提供了,我们只需要熟悉API即可!!但是这样的结果就是Runtime很高,这也是java 永远比不上c++ 的地方。
本文介绍了一个Java方法,用于计算一个无符号整数的二进制表示中‘1’的个数(即汉明重量)。通过迭代右移并检查最低位的方式实现,适用于32位整数。
411

被折叠的 条评论
为什么被折叠?



