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

c#, literals, unsigned-integer, variable-assignment

Solution

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.

Problem

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 ?

Original source