It's because it's a signed integer. An unsigned 32-bit integer give you the value you expect.
Check out this MSDN page - http://msdn.microsoft.com/en-us/library/exx3b86w(v=vs.80).aspx
For a more in depth explanation on why this is check out the link in Jackson Popes answer related to Two's Complement number representation.
Also some further reading.