Welcome to the Ranch Ian.
integers are signed in
Java. They are represented in two's complement. Any int with the most significant bit to 1 is a negative number. This is the reason why 0x800000000 yields -2147483648. It is an int that is in range : from -2147483648 to 2147483647
The compiler however will complain if the number is out of range:
int x = 0x80000000000000000000;