Dim x = -2147483648Dim y = Integer.MinValue
Well, the question is as easy as that - what Types are x and y and what's the reason?
P.S. Needless to say that you shouldn’t use the VB.NET compiler but the one in your head ;-)
PingBack from http://msdnrss.thecoderblogs.com/2007/11/29/do-you-know-your-language-this-time-its-the-tiny-vb-quiz/
Integer.MinValue is an (32 bit) integer, that part is easy. The -2147483648 is a long, but I'm not sure why. I've seen this happen before and I think it has to do with the way the scanner produces tokens. The deal is that 32bit two's complement ints are supposed to have a range from -2147483648 to 2147483647 and indeed &H80000000 produces -2147483648 as an integer. So I guess the scanner interprets '-2147483648' as two tokens, the literal '2147483648' (which is a long) and the unary '-' operator.
Perfect! I salute you!
"Integer literals are not signed. As a result, the expression -10 is interpreted as the negation operator applied to the integer literal 10. … The expression -2147483648 is typed as Long instead of Integer, because the literal 2147483648 will not fit inside an Integer type (even though its negative will)." (Paul Vick, “The Visual Basic .NET Programming Language”, page 67). Because Integer.MinValue is stored in the BCL as a literal Int32 (0x80000000) VB is able to use that value directly.
Ah. Good to know that's actually documented ;-)