-1 * int.MinValue == int.MinValue?? Is this a bug?

This is not a bug.

int.MinValue * -1 is 1 greater than int.MaxValue can hold. Thus, the number wraps around back to int.MinValue.

This is basically caused by an integer overflow.

Int32.MinValue:

The value of this constant is -2,147,483,648

Int32.MaxValue:

The value of this constant is 2,147,483,647

So, -2,147,483,648 * -1 = 2,147,483,648 which is 1 greater than Int32.MaxValue.


It's not a bug, it's an overflow.

In two's complement representation, the space of representable numbers is not symmetric. The opposite of the smallest integer cannot be represented. Computing it overflows and gives you the same number again.


int i = -1 * int.MinValue;

This doesn't even compile unless you disable checking:

error CS0220: The operation overflows at compile time in checked mode