java – Overflow by multiplying two integers in BigInteger

Question:

I'm starting my studies in Java and I have a task: generate two random integers and store their multiplication. For that, I tried using long and BigInteger . But the result of this multiplication is almost always negative. Why?

int p = a.getN();
int q = b.getN();
BigInteger n = BigInteger.valueOf(p * q);

The getN() method generates and returns a random value.

Output example for p , q and n , respectively:

1274403499
1155563989
-664855737

(As I understand it, it should be 1472654790899997511 , which uses something around 61 bits)

Answer:

It's simple, the code is multiplying two integers and passing it to a method that will create a BigInteger . When the multiplication of two integers takes place, it overflows and gives the negative value.

Probably the expectation was that the integers were passed to BigInteger number and then multiplied. It solves like this:

int p = 1274403499;
int q = 1155563989;
BigInteger n1 = BigInteger.valueOf(p);
BigInteger n2 = BigInteger.valueOf(q);
BigInteger n = n1.multiply(n2);

See working on ideone . And on repl.it. Also posted on GitHub for future reference .

Scroll to Top