2012-12-04 6 views
5

Im Vorbereitung für eine sehr knifflige C# -Prüfung und diese Frage tauchte dabei auf. Ich habe den folgenden Code:C# Int32 Literal kann nur in langen Datentyp gespeichert werden

uint zzz = -12u; 

-12u als System.Uint32 wörtliche erkannt wird, aber es kann nur in Variable vom Typ long gespeichert werden. Warum das ?

+5

Wissen Sie, wofür das 'u' steht? –

+3

Ich vermute, weil ein unsigned int unsigned sein soll? –

+2

Hinweis: "-12u wird als System.Uint32 erkannt" ist falsch. Es wäre richtig zu sagen "12u wird als System.Uint32 erkannt". – vcsjones

Antwort

12

Was es tut, ist das Nehmen des unsigned int 12 und das Versuchen, es in einen negativen Wert zu konvertieren (das -), das eine Umwandlung in einen Typ erfordert, der negative Zahlen behandeln kann, wie ein vorzeichenloser Int kann nicht.

Weil es ein vorzeichenloser int ist, hat es mögliche Werte außerhalb des Bereichs von int, daher ist eine Umwandlung in einen langen Wert erforderlich.

+1

Yup; Wenn Sie sich die [integer literal spec] (http://msdn.microsoft.com/en-us/library/aa664674.aspx) ansehen, können Sie sehen, dass das Minuszeichen nicht Teil des Literals ist, also erstellt es ein 'uint' und dann auf' long' erweitern, wenn man es negiert. – Rawling

+0

Danke Mann das war was ich mich wunderte. –

0

weil u ist für unsigned int
zur Handhabung -ve schreibt es in langen Datentyp umzuwandeln
-12u a int Datentyp signiert ist & es in unsigned Typ speichert es verwendet long Datentyp

Verwandte Themen