BigInteger.intValue() 是一种单向操作,可能会丢失 BigInteger . 所以不可能得到准确的原件 BigInteger . 我想知道怎样才能产生一个 BigInteger 同样的结果 intValue 在 java ?既然它在某种程度上独立于按位运算,那么它在其他语言(如c#)中是如何实现的呢?
BigInteger.intValue()
BigInteger
intValue
nfg76nw01#
对于大于 Integer.MIN_VALUE 小于等于 Integer.MIN_VALUE ```BigInteger i = new BigInteger( value );i.equals( BigInteger.valueOf( i.intValue() );
Integer.MIN_VALUE
会是 `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` 已正确初始化。
1条答案
按热度按时间nfg76nw01#
对于大于
Integer.MIN_VALUE
小于等于Integer.MIN_VALUE
```BigInteger i = new BigInteger( value );
i.equals( BigInteger.valueOf( i.intValue() );
BigInteger temp = myInt + n * (BigInteger)(uint.MaxValue) * (BigInteger) Math.Pow( 2, 32 );
BigInteger temp = 1;
BigInteger a1 = …
BigInteger a2 = …
BigInteger result = a1 + a2;