4
回答
用String字符串表示的一个64位二进制数转化为java.math.BigInteger类型,转换规则是什么?二进制数为什么会发生改变?
科大讯飞通用文字识别100000次/天免费使用。立即申请   

如下示例,有以下程序运行:

public class Test {
 public static void main(String[] args) {
  
  String thisstrhash = "0000011001111101111100101011111010000110110101110101110001100100";
  String otherstrhash = "0000011001111101101100101011111010000110110101110101111001001100";

  BigInteger thisintegerhash = new BigInteger(thisstrhash);
  BigInteger otherintegerhash = new BigInteger(otherstrhash);
  
  System.out.println(thisintegerhash);
  System.out.println(otherintegerhash);
 }

运行结果:

11001111101111100101011111010000110110101110101110001100100

11001111101101100101011111010000110110101110101111001001100

从结果中看出,输出结果thisintegerhash,它把thisstrhash的二进制数前五位丢弃了,保留了剩下的59位。

问题:

这是为什么呢?BigInteger(String val) 这个构造方法是怎样转换的?!


举报
hiqj
发帖于4年前 4回/1K+阅
共有4个答案 最后回答: 4年前

我能告诉你,有这么一个方法么?

BigInteger(String val, int radix)
          将指定基数的 BigInteger 的字符串表示形式转换为 BigInteger。

你要怎么用呢?new BigInteger(val,2);

既然解决了问题,那么:妹子求交往。

引用来自“sxgkwei”的评论

我能告诉你,有这么一个方法么?

BigInteger(String val, int radix)
          将指定基数的 BigInteger 的字符串表示形式转换为 BigInteger。

你要怎么用呢?new BigInteger(val,2);

既然解决了问题,那么:妹子求交往。

我试了一下:

BigInteger thisintegerhashtwo = new BigInteger(thisstrhash, 2);

  System.out.println(thisintegerhashtwo);
  System.out.println(Long.toBinaryString(thisintegerhashtwo.longValue()));

输出结果:

467796836436368484
11001111101111100101011111010000110110101110101110001100100

也就是说:

BigInteger thisintegerhashtwo = new BigInteger(thisstrhash, 2);

和    BigInteger thisintegerhash = new BigInteger(thisstrhash);

它们的输出结果是一样的?!!!

引用来自“dobfish”的评论

前面都是0,输出就忽略了……

嗯,有道理!这似乎是最合理的解释了!!!谢谢啦!

顶部