从指定的int值生成biginteger

z9ju0rcb  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(389)

BigInteger.intValue() 是一种单向操作,可能会丢失 BigInteger . 所以不可能得到准确的原件 BigInteger . 我想知道怎样才能产生一个 BigInteger 同样的结果 intValue 在 java ?
既然它在某种程度上独立于按位运算,那么它在其他语言(如c#)中是如何实现的呢?

nfg76nw0

nfg76nw01#

对于大于 Integer.MIN_VALUE 小于等于 Integer.MIN_VALUE ```
BigInteger i = new BigInteger( value );
i.equals( BigInteger.valueOf( i.intValue() );

会是 `true` . 在这里 `BigInteger.valueOf()` 需要一个 `long` 争论。
对于超出上述范围的值, `BigInteger.intValue()` 不会返回正确的值,因此无法重建原始值 `BigInteger` 从这个结果来看,绝对不是。
所以没有安全的方法 `BigInteger` 至 `int` 为所有可能的值工作。这意味着也没有退路…
biginteger是java中的一个类。这意味着仅仅通过位操作(除了一些非常、非常、非常肮脏的jni代码或者通过另一种丑陋的方式直接在jvm中操作内存)并不能得到一个大整数。所以只有这样才能得到一个新的 `BigInteger` 示例调用相应的构造函数。
类似于下面的c代码

BigInteger temp = myInt + n * (BigInteger)(uint.MaxValue) * (BigInteger) Math.Pow( 2, 32 );

在java中不起作用,在 `BigInteger` . 一开始(类似于)自动装箱并不是针对 `BigInteger` ,因此这将导致编译器罢工:

BigInteger temp = 1;

这个 `+` 也没有为定义运算符 `BigInteger` 在java中,这也不会编译:

BigInteger a1 = …
BigInteger a2 = …
BigInteger result = a1 + a2;

即使我们假设 `a1` 以及 `a2` 已正确初始化。

相关问题