2012-12-04 16 views
5

Çok zor bir C# sınava hazırlanıyorum ve bu soruya cevap verdim. Aşağıdaki kod var:C# int32 literal yalnızca uzun veri tipinde saklanabilir

uint zzz = -12u; 

-12uSystem.Uint32 literal olarak kabul edilmektedir ancak yalnızca tip long ait değişkeninde saklanabilir. Neden ?

+5

"u" nın ne anlama geldiğini biliyor musunuz? –

+3

Sanırım imzasız bir int imzasız olduğu için mi? –

+2

İpucu: "-12u, System.Uint32 olarak tanınır" yanlış. "12u, System.Uint32 olarak tanınır" demek doğru olur. – vcsjones

cevap

12

Yaptığı şey, imzasız int'yi (12) almak ve onu imzasız bir int olarak negatif sayıları işleyebilen bir türe dönüştürme gerektiren negatif bir değere (-) dönüştürmeye çalışmaktır.

Bu imzasız bir int olduğu için int aralığının dışındaki olası değerlere sahiptir, dolayısıyla uzun bir dönüşüm gerekir.

+1

Yup; [tamsayı tamsayılarına] bakarsanız (http://msdn.microsoft.com/en-us/library/aa664674.aspx) eksi işaretinin değişmez bir parçası olmadığını görebilirsiniz. 'uint' ve sonra onu reddederek 'uzun' olarak genişletmek zorunda. – Rawling

+0

Teşekkürler, merak ettiğim şey buydu. –

0

u için çünkü işaretsiz int
kullanımı onu uzun veri türü dönüştürerek oturum negatif
-12u bu long veri türünü kullanan unsigned türü depolamak için imzalanmış int veri türü & olduğu için