所以我在互联网上看到了这个问题


  编写一个函数,计算一个字符的位数


现在显然这使我感到困惑(或者我不会在这里)。

我的第一个想法是“默认情况下不是所有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次时,我们已经计算了所有设置的位。

08-28 17:43