If it's not obvious, assuming a 32-bit integer, -0x80000000 equals 0x80000000 which equals -2147483648 which equals INT_MIN.
The unary negation operator causes overflow, making the result negative again.
Here's a simple program that prints these values: http://codepad.org/dFBRabf9.
I think -0x80000000 is perfectly valid, but that depends on the grammar. If that gets parsed as "apply negation operator to 0x80000000", it triggers undefined behavior. If it gets parsed as a negative constnat value, things are OK.
In either case, chances are INT_MIN is the better way to write it.