【发布时间】:2015-08-06 10:21:35
【问题描述】:
我有一个十进制数,我需要将其转换为二进制,然后在该二进制表示中找到一个的位置。
输入是5,二进制是101,输出应该是
1
3
下面是我的代码,它只提供2 的输出,而不是我想以二进制表示形式提供一个人的位置。我怎样才能获得从 1 开始的设置位的位置?
public static void main(String args[]) throws Exception {
System.out.println(countBits(5));
}
private static int countBits(int number) {
boolean flag = false;
if (number < 0) {
flag = true;
number = ~number;
}
int result = 0;
while (number != 0) {
result += number & 1;
number = number >> 1;
}
return flag ? (32 - result) : result;
}
【问题讨论】:
-
注意:检查
number是否为负的代码不是必需的。如果您使用>>>运算符而不是>>,则零将在左侧移入(而不是将1 移入负数),因此number最终将是0 而result将始终是正确计数。 -
如果您尝试返回 1 位的位置,则需要使用
>>>。如果你尝试专门处理负数,你的工作会复杂很多。
标签: java algorithm binary bit-manipulation