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.

È stato utile?

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

§2.4.4.2 Intero letterali :

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 o u, ha il primo di questi tipi in cui il suo valore può essere rappresentato:. uint, ulong
  • Se il letterale è suffisso L o l, 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 o lu, è di tipo ulong.

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 o f è di tipo float. Ad esempio, i letterali 1f, 1.5f, 1e10f e 123.456F sono tutti di tipo float.
  • Un vero e proprio letterale seguito dal suffisso D o d è di tipo double. Ad esempio, i letterali 1d, 1.5d, 1e10d e 123.456D sono tutti di tipo double.
  • Un vero e proprio letterale seguito dal suffisso M o m è di tipo decimal. Ad esempio, la letterali 1m, 1.5m, 1e10m e 123.456M sono tutti di tipo decimal. 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, il 2.900m letterale verrà analizzato per formare decimale con segno 0, coefficiente 2900 e 3 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;.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top