首页 > 解决方案 > Java:将 BigInteger 的绝对值转换为 intValue() 结果为负值

问题描述

我正在尝试进行 BigInteger 指数计算。对于我的计算,我试图从 m2 中减去 m1(两者都是 BigInteger)并得到一个正值,但是如果我将这个正数转换为一个 int 数,我最终会得到一个负值。

BigInteger m1 = new BigInteger("2905012217");
BigInteger m2 = new BigInteger("534500746");
int exp = m2.subtract(m1).abs().intValue();
System.out.println(exp);

BigInteger g1 = new BigInteger("2");
BigInteger output_test_g1 = g1.pow(exp); 

输出:

m1:2905012217
m2:534500746
exp:-1924455825

错误:

Exception in thread "main" java.lang.ArithmeticException: Negative exponent
    at java.base/java.math.BigInteger.pow(BigInteger.java:2401)
    at FHEv1.homomorphicEqualityTest(FHEv1.java:195)
    at FHEv1.main(FHEv1.java:323)

标签: javacryptography

解决方案


整数溢出。Java 如何处理整数下溢和上溢以及如何检查它?

太高溢出到必要时Integer.MIN_VALUE继续计数。太低了,Integer.MAX_VALUE如果需要,请继续计数。

例如,

int A = Integer.MAX_VALUE;
A++;
//A should be Integer.MIN_VALUE, correct me if I am wrong

推荐阅读