int z = 0xDeadCafe;

Well, this is hexidecimal, which I am assuming you know.

this will give the printing output as z = -559035650. Whats the reason to get a minus (-) sign here?

This requires a bit of explanation... With octal, and with hexidecimal, the compiler allows the number to be specified as an unsigned number. This is because octal and hexidecimal numbers are a common technique to specify bit

patterns (such as bit masks). In this case, the number 0xDEADCAFE actually overflows the value of a signed int -- but not an unsigned int. It uses the sign bit as the highest order bit in an unsigned int.

Anyway, to understand how a unsigned number maps to it signed counterpart, you need to userstand "twos-complement".

http://en.wikipedia.org/wiki/Two's_complement
Basically, the very big unsigned number is actually a negative number when the bit patterns are treated as a signed number.

Henry