Sono nuovo di C# e voglio capire come funzionano i valori. Se osservo un valore intero normale, contiene tre parti importanti: il tipo, il nome e il valore.C# suffisso dietro letterale numerico
int testInt = 3;
| | |
Type Name Value
Ma quando vedo un valore float che mi confonde un po 'a causa del suffisso F
.
float testFloat = 3.0F;
| | | |
Type Name Value Type
Ora ci sono due tipi di esso, e senza il suffisso F
il valore sarebbe una doppia. Ma perché sta succedendo questo quando posso dichiarare la doppia variabile
double testDouble = 3.0D;
Il double
come prima parola dovrebbe essere sufficiente, non dovrebbe? Lo stesso vale per il valore decimale con il suffisso M:
decimal testDecimal = 3.0M;
Poi si inizia davvero mi confusione quando si tratta di altri suffissi:
ulong bigOne = 2985825802805280508UL;
ho usato ulong
in un test prima e sanno che lo u
è per "unsigned" e lascia il valore due volte più alto del normale. Quindi ottieni di nuovo l'U come suffisso e la lettera L letterale come dice Google. A quanto ho capito, i "valori letterali" sono tipi di valore che contengono numeri. Ma quello che non capisco è, perché funziona a lungo anche senza il suffisso?
ulong bigOne = 2985825802805280508;
Poi ho cercato qualcosa di diverso per capire l'importanza del suffisso
byte testLong = 12312UL;
Questo non ha funzionato perché il valore è troppo alto per byte (254) e il suffisso non lo converte a una variabile lunga
Perché la prima parola (tipo) non è sufficiente per una dichiarazione? La prima parola dovrebbe essere sufficiente per dire il tipo. La migliore pratica è quella di dare sempre un suffisso ai valori?
Hai ragione, una dichiarazione di tipo è sufficiente quando c'è anche un incarico. Ecco perché la parola chiave var è stata aggiunta a C#: https://msdn.microsoft.com/en-us/library/bb383973.aspx – Max
'U' è per non firmato, non non assegnato. –
Anche per quanto riguarda i calcoli come 4.0/3? Dovrebbe usare la precisione singola o doppia? Questo influenza davvero il risultato. Oppure considerare 2000000000 * 3? È un overflow o solo un lungo? Non sempre si assegnano direttamente valori. – dryman