做了一道关于 codility 的问题,被要求拿两个数字并得到产品。然后获取该数字的二进制表示并计算二进制数中的 1 的个数。 我的代码是
return method(int a, int b)
{
int count=0;
int num;
num = a* b;
while(num>0)
{
if(num %2 ==1)
{
count++;
}
num = num >> 1;
}
return count;
}
然而它只给出了 50% 的正确率。谁能解释一下这一点。有什么我错过的事情我应该注意吗?
最佳答案
使用模运算符无法正确计算负数中的位数。请改用“num & 1”。另外,请确保您使用的是无符号右移,否则负数可能会产生无限循环。
正如 Lashane 所说,如果可能,请使用 64 位产品。
关于java - 计算二进制数中 1 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33047792/