首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用java.math.BigInteger.bitCount()查找整数二进制表示法中的1的个数

使用java.math.BigInteger.bitCount()查找整数二进制表示法中的1的个数
EN

Stack Overflow用户
提问于 2012-01-17 09:58:47
回答 5查看 1.6K关注 0票数 1

我有一个任务,我需要创建一个函数,告诉你一个整数的二进制表示法中有多少个1。我已经通过创建自己的算法做到了这一点。第二步是使用java.math.BigInteger.bitCount()来完成相同的任务。我在Java API中查找了这一点,但有没有人可以把它翻译成英语,解释一下它与在整数的二进制表示法中查找1的个数有什么关系,也许还有一个例子。我试着用谷歌搜索,但除了下面的定义什么也没找到。

public int bitCount()

说明:返回此数字的二进制补码表示形式中与其符号位不同的位数。当在BigIntegers上实现位向量样式集时,此方法非常有用。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-01-17 10:08:27

代码语言:javascript
复制
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

修改了新注释的代码:

代码语言:javascript
复制
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“位,因为所有位都与符号位相同。但它应该对所有正值都有效。

票数 0
EN

Stack Overflow用户

发布于 2012-01-17 10:02:04

在负整数的two's complement表示中,符号位是1,而在非负整数的表示中,符号位是0。因此,对于正整数,bitCount()返回非0的位数,即1位数。

票数 4
EN

Stack Overflow用户

发布于 2012-01-17 10:02:35

再次读取javadoc,然后假设为正数--这意味着符号位将为零。

一旦你理解了这一点,想想在消极的情况下该怎么做。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8888805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档