所以我在互联网上看到了这个问题
编写一个函数,计算一个字符的位数
现在显然这使我感到困惑(或者我不会在这里)。
我的第一个想法是“默认情况下不是所有char
的16位吗?”但显然这一定是错误的,因为存在此问题。我不知道从哪里开始。也许我可以得到一个char的十六进制值?有没有一种简单的方法可以将十六进制转换为二进制?这是可以问到任何语言的东西吗(我对Java很好奇),还是只喜欢C或其他东西就可以了?
最佳答案
如果要避免递归,这是另一种方法。
public static int bitsSet(char arg) {
int counter = 0;
for (int oneBit = 1; oneBit <= 0x8000; oneBit <<= 1) {
if ((arg & oneBit) > 0) {
counter++;
}
}
return counter;
}
更新资料
这里有一些解释。在循环中,每次
oneBit
左移一次,这会使它的值加倍。 <<=
操作是oneBit = oneBit << 1
的一种简写。因此,第一次,我们有了oneBit = 0000000000000001
。然后,下一次,我们有oneBit = 0000000000000010
,然后是oneBit = 0000000000000100
,依此类推,直到我们有oneBit = 1000000000000000
时到达最后一次迭代(这些都是二进制的)。现在,如果
arg & oneBit
设置了匹配的位,则oneBit
的值将等于arg
,否则,将0
的值设置为counter++
。因此,如果遇到设置位,该条件将执行。到循环运行全部16次时,我们已经计算了所有设置的位。