Prasanna Kumar - 1 year ago 64
Java Question

# Why maximum integer number multiplication gives 1 as result

I think much explanation is not required, why below calculation gives result as 1?

``````int a = 2147483647;
int b = 2147483647;

int c = a * b;
long d = a * b;
double e = a * b;

System.out.println(c);  //1
System.out.println(d);  //1
System.out.println(e);  //1.0
``````

The binary representation of the integer number 2147483647 is as following:

``````01111111 11111111 11111111 11111111
``````

Multiplying this with itself results in the number 4611686014132420609 whose binary representation is:

``````00111111 11111111 11111111 11111111 00000000 00000000 00000000 00000001
``````

This is too large for the `int` type which has only 32 bits. The multiplication of `a * b` is done as an integer multiplication only, regardless of the variable's type to which the result is assigned (which might do a widening conversion, but only after the multiplication).

So, the result simply cuts off all bits that do not fit into the 32 bits, leaving only the following result:

``````00000000 00000000 00000000 00000001
``````

And this simply is the value 1.

If you want keep the information, you must do the multiplication with the `long` type which has 64 bits:

``````long a = 2147483647;
long b = 2147483647;
long mult = a * b;

System.out.println((int) mult);     // 1
System.out.println(mult);           // 4611686014132420609
System.out.println((double) mult);  // 4.6116860141324206E18
``````

If you need more bits for a calculation you might consider `BigInteger` (for integral numbers) or `BigDecimal` (for decmial numbers).

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download