web-dev-qa-db-fra.com

Format littéral C # short / long / int?

Dans C/C #/etc., vous pouvez indiquer au compilateur qu’un nombre littéral n’est pas ce qu’il semble être (c.-à-d., float au lieu de double, unsigned long au lieu de int:

var d = 1.0; // double
var f = 1.0f; // float
var u = 1UL; // unsigned long

etc.

Quelqu'un pourrait-il m'indiquer une liste de ceux-ci? Je recherche spécifiquement un suffixe pour short ou Int16.

161
3Dave
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

Je pense que c'est tout ... il n'y a pas de spécificateurs littéraux pour short/ushort/byte/sbyte

270
Thomas Levesque

De §2.4.4.2 Littéraux entiers :

Le type d'un littéral entier est déterminé comme suit:

  • Si le littéral n'a pas de suffixe, il possède le premier de ces types dans lequel sa valeur peut être représentée: int, uint, long, ulong.
  • Si le littéral est suffixé par U ou u, il possède le premier de ces types dans lequel sa valeur peut être représentée: uint, ulong.
  • Si le littéral est suffixé par L ou l, il possède le premier de ces types dans lequel sa valeur peut être représentée: long, ulong.
  • Si le littéral est suffixé par UL, Ul, uL, ul, LU, Lu, lU ou lu, il est de type ulong.

Et à partir de §2.4.4.3 Littéraux réels :

Si aucun suffixe de type réel n'est spécifié, le type du littéral réel est double. Sinon, le suffixe de type réel détermine le type du littéral réel, comme suit:

  • Un vrai littéral suffixé par F ou f est de type float. Par exemple, les littéraux 1f, 1.5f, 1e10f, et 123.456F sont tous de type float.
  • Un vrai littéral suffixé par D ou d est de type double. Par exemple, les littéraux 1d, 1.5d, 1e10d, et 123.456D sont tous de type double.
  • Un vrai littéral suffixé par M ou m est de type decimal. Par exemple, les littéraux 1m, 1.5m, 1e10m, et 123.456M sont tous de type decimal. Ce littéral est converti en valeur décimale en prenant la valeur exacte et, si nécessaire, en arrondissant à la valeur représentable la plus proche à l'aide de l'arrondissement bancaire (Section 4.1.7). Toute échelle apparente dans le littéral est conservée sauf si la valeur est arrondie ou si la valeur est zéro (dans ce dernier cas, le signe et l'échelle seront 0). Par conséquent, le littéral 2.900m sera analysé pour former la décimale avec le signe 0, coefficient 2900 et échelle 3.
40
BoltClock

Si votre variable n'est pas déjà courte, vous devez la lancer explicitement:

Object s = (Int16) 1;
8
Chris

Il n'y en a pas un pour faire court. Il suffit d'utiliser short s = 1;.

3
Random832