C# int32 literal can only be stored in long data type
Asked Answered
A

2

5

Im preparing for a very tricky c# exam and this question popped up while doing so. I have the following code:

 uint zzz = -12u;

-12u is recognized as System.Uint32 literal but it can only be stored in variable of type long. Why is that ?

Avram answered 4/12, 2012 at 15:7 Comment(5)
Do you know what the u stands for?Prudenceprudent
I'm guessing because an unsigned int is supposed to be unsigned?Indeclinable
Hint: "-12u is recognized as System.Uint32" is incorrect. It would be correct to say "12u is recognized as System.Uint32".Finnigan
unsigned means that only non-negative values are allowed. -12 is simply not representable in an uint variableHandtohand
I know what the u stands for, Im trying some unlikely situations. U stands for unsigned, while -12 is obviously negative number. However the binary representation of -12, when converted to a uint decimal number can fit perfectly in uint. But for some reason I cant store that value in a variable of type uint.Avram
U
12

What it is doing is taking the unsigned int 12 and trying to convert it into a negative value (the -) which requires a conversion to a type that can handle negative numbers as an unsigned int cannot.

Because it is an unsigned int it has possible values outside the range of int, so conversion to a long is required.

Unfriendly answered 4/12, 2012 at 15:13 Comment(1)
Yup; if you look at the integer literal spec you can see that the minus sign isn't part of the literal, so it's creating a uint and then having to widen it to long when negating it.Gooseflesh
A
0

because u is for unsigned int
for handling -ve sign it converting it into Long data type
-12u is a signed int data type & for storing it in unsigned type it uses long data type

Aeromechanic answered 4/12, 2012 at 15:9 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.