Search code examples
javaoperatorsbitwise-operatorsones-complement

Why does the negative of Integer.MIN_VALUE give the same value?


Consider the below java code.

Integer value = Integer.MIN_VALUE;
System.out.println(value);

value = -value;
System.out.println(value);

Output

-2147483648
-2147483648

How the negative value of Integer.MIN_VALUE value results the same value?

However the result can't be 2147483648 because the maximum value of Integer in java is 2147483647.

But want to know why -2147483648? What kind of bit-wise operations are happening internally?


Solution

  • What kind of bit-wise operations are happening internally?

    Java uses two's complement representation of signed numbers. Therefore, the change of sign operation, consists of two steps:

    1. Inverting the bits of the original value, and
    2. Adding 1 to the result.

    2147483648's representation is shown below:

    10000000000000000000000000000000
    

    Inverting it produces

    01111111111111111111111111111111
    

    Adding 1 makes it the same number again, i.e.

    10000000000000000000000000000000
    

    due to integer overflow.