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?
When you negate -2147483648, it resolves to 2147483648, which exceeds the Integer.MAX_VALUE with 1. Then the value overflows to Integer.MIN_VALUE again.
From the JLS:
The integral types are byte, short, int, and long, whose values are 8-bit, 16-bit, 32-bit and 64-bit signed two's-complement integers.
So, every unary operation done on an integer will actually be applied on the two's complement representation of the number.
When the Integer.MAX_VALUE is reached it will consist of a leading 0 and 31 1 bits. Adding 1 would make it a number with a leading 1 and 31 trailing 0s, which is actually the two's complement representation of Integer.MIN_VALUE.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With