C # breve / formato lungo / int letterale?
-
26-10-2019 - |
Domanda
In C / C # / ecc si può dire al compilatore che un numero letterale non è quello che sembra essere (ad esempio, invece di float
double
, unsigned long
invece di int
:.
var d = 1.0; // double
var f = 1.0f; // float
var u = 1UL; // unsigned long
ecc.
Qualcuno mi potrebbe punto a un elenco di questi? Sono in particolare alla ricerca di un suffisso per short
o Int16
.
Soluzione
var d = 1.0d; // double
var d0 = 1.0; // double
var d1 = 1e+3; // double
var d2 = 1e-3; // double
var f = 1.0f; // float
var m = 1.0m; // decimal
var i = 1; // int
var ui = 1U; // uint
var ul = 1UL; // ulong
var l = 1L; // long
Credo che sia tutto ... non ci sono specificatori letterali per brevi / ushort / byte / sbyte
Altri suggerimenti
Il tipo di un letterale intero viene determinato come segue:
- Se il letterale non ha suffisso, ha il primo di questi tipi in cui il suo valore può essere rappresentato:
.int
,uint
,long
,ulong
- Se il letterale è suffisso
U
ou
, ha il primo di questi tipi in cui il suo valore può essere rappresentato:.uint
,ulong
- Se il letterale è suffisso
L
ol
, ha il primo di questi tipi in cui il suo valore può essere rappresentato:.long
,ulong
- Se il letterale è suffisso
UL
,Ul
,uL
,ul
,LU
,Lu
,lU
olu
, è di tipoulong
.
E da §2.4.4.3 letterali reale :
Se non viene specificato nessun suffisso tipo reale, il tipo del reale letterale è doppia. Altrimenti, il suffisso tipo reale determina il tipo del reale letterale, come segue:
- Un vero e proprio letterale seguito dal suffisso
F
of
è di tipofloat
. Ad esempio, i letterali1f
,1.5f
,1e10f
e123.456F
sono tutti di tipofloat
.- Un vero e proprio letterale seguito dal suffisso
D
od
è di tipodouble
. Ad esempio, i letterali1d
,1.5d
,1e10d
e123.456D
sono tutti di tipodouble
.- Un vero e proprio letterale seguito dal suffisso
M
om
è di tipodecimal
. Ad esempio, la letterali1m
,1.5m
,1e10m
e123.456M
sono tutti di tipodecimal
. Questo letterale viene convertita in un valore decimale prendendo il valore esatto, e, se necessario, arrotondando al valore rappresentabile più vicino utilizzando arrotondamento (sezione 4.1.7). Qualsiasi scala apparente nel letterale è conservata a meno che il valore è arrotondato o il valore è zero (nel qual caso quest'ultima segno e scala saranno 0). Quindi, il2.900m
letterale verrà analizzato per formare decimale con segno0
, coefficiente2900
e3
scala.
Se la variabile non è già una breve, si deve lanciare in modo esplicito:
Object s = (Int16) 1;
Non è uno in breve. Proprio l'uso short s = 1;
.