2012-12-04 17 views
5

Mi sto preparando per un esame C# molto complicato e questa domanda è saltata fuori mentre lo facevo. Ho il codice seguente:C# int32 letteral può essere memorizzato solo nel tipo di dati lunghi

uint zzz = -12u; 

-12u è riconosciuto come System.Uint32 letterale ma può essere memorizzato solo nella variabile di tipo long. Perché ?

+5

Sai cosa significa 'u'? –

+3

Suppongo che un int non firmato debba essere senza segno? –

+2

Suggerimento: "-12u è riconosciuto come System.Uint32" non è corretto. Sarebbe corretto dire "12u è riconosciuto come System.Uint32". – vcsjones

risposta

12

Quello che sta facendo è prendere il 12 int unsigned e provare a convertirlo in un valore negativo (il -) che richiede una conversione in un tipo che può gestire numeri negativi come non può un int unsigned.

Poiché è un int unsigned ha valori possibili al di fuori dell'intervallo di int, quindi è necessaria una conversione a long.

+1

Yup; se guardi la [specifica letterale intera] (http://msdn.microsoft.com/en-us/library/aa664674.aspx) puoi vedere che il segno meno non fa parte del letterale, quindi sta creando un 'uint' e poi doverlo allargare a' long' quando lo si nega. – Rawling

+0

Grazie amico era quello che stavo chiedendo. –

0

perché u è per unsigned int
per la movimentazione ve firmarlo conversione in tipo di dati Long
-12u è un int firmato tipo di dati & per riporlo in unsigned tipo che utilizza il tipo di dati long