我有一个任务,我需要创建一个函数,告诉你一个整数的二进制表示法中有多少个1。我已经通过创建自己的算法做到了这一点。第二步是使用java.math.BigInteger.bitCount()来完成相同的任务。我在Java API中查找了这一点,但有没有人可以把它翻译成英语,解释一下它与在整数的二进制表示法中查找1的个数有什么关系,也许还有一个例子。我试着用谷歌搜索,但除了下面的定义什么也没找到。
public int bitCount()
说明:返回此数字的二进制补码表示形式中与其符号位不同的位数。当在BigIntegers上实现位向量样式集时,此方法非常有用。
发布于 2012-01-17 10:08:27
jcomeau@intrepid:/tmp$ cat test.java; javac test.java; java test
import java.math.BigInteger;
public class test {
public static void main(String[] args) {
System.out.println("one bits: " + new BigInteger("0f0f0f0f0f0f0", 16).bitCount());
}
}
one bits: 24修改了新注释的代码:
jcomeau@intrepid:/tmp$ cat test.java; javac test.java; java test 0xf0f0f0f0f0f0 0x200 200 1 0
import java.math.BigInteger;
public class test {
public static void main(String[] args) {
BigInteger number = null;
for (String arg : args) {
if (arg.startsWith("0x")) {
number = new BigInteger(arg.substring(2), 16);
} else {
number = new BigInteger(arg); // decimal by default
}
System.out.println("one bits in " + arg + ": " + number.bitCount());
}
}
}
one bits in 0xf0f0f0f0f0f0: 24
one bits in 0x200: 1
one bits in 200: 3
one bits in 1: 1
one bits in 0: 0显然,通过阅读您发布的javadoc,这可能符合您或您的教授对负数的预期,也可能不符合。例如,这将为负1返回0 "1“位,因为所有位都与符号位相同。但它应该对所有正值都有效。
发布于 2012-01-17 10:02:04
在负整数的two's complement表示中,符号位是1,而在非负整数的表示中,符号位是0。因此,对于正整数,bitCount()返回非0的位数,即1位数。
发布于 2012-01-17 10:02:35
再次读取javadoc,然后假设为正数--这意味着符号位将为零。
一旦你理解了这一点,想想在消极的情况下该怎么做。
https://stackoverflow.com/questions/8888805
复制相似问题