Je suis confus!1000000000 * 3 = -1294967296?
Aujourd'hui est le 3 Novembre
DateTime DateTime = new DateTime(2010,11,3);
long shazbot = 1000000000 * DateTime.Day;
Shazbot sort à -1294967296
Huh ???
Je suis confus!1000000000 * 3 = -1294967296?
Aujourd'hui est le 3 Novembre
DateTime DateTime = new DateTime(2010,11,3);
long shazbot = 1000000000 * DateTime.Day;
Shazbot sort à -1294967296
Huh ???
shazbot
peut être un long
, mais ni 1000000000
ou DateTime.Day
sont. Donc, C# fait int
multiplication en premier (ce qui entraîne un débordement) puis le transforme en long
pour stocker dans shazbot
.
Si vous voulez un résultat long
, faire l'un d'eux un long
, comme ceci:
long shazbot = 1000000000L * DateTime.Day;
Edit: C# vous donne un avertissement si vous utilisez l
au lieu de L
. Fixé.
Comment convertir mes valeurs en longues? Convert.ToInt64? – sooprise
Cast? '(long) DateTime.Day' – AlexanderMP
J'ai utilisé ce tour" l ", travaillé comme un charme. Merci! : D – sooprise
Cast pour longtemps comme ceci:
long shazbot = 1000000000L * DateTime.Day;
Il suffit de lancer l'un d'eux à long pour obtenir l'expression à évaluer aussi longtemps. –
Trop de choses à écrire. Il n'y a absolument aucun besoin de jeter les deux opérandes. L'un est suffisant. La seconde sera implicitement castée dans le bon type. Ou, comme R. Bemrose l'a suggéré, écrire un littéral long au lieu du littéral int par défaut, de sorte qu'aucun casting ne soit nécessaire dans ce cas. – AlexanderMP
Merci, je vais changer mon exemple. – jlafay
Je n'ai jamais utilisé C# mais on dirait que votre long est de 32 bits. Signé. hein. –
@Josh, en C# 'longs' sont [64-bit] (http://msdn.microsoft.com/en-us/library/ctetwysk%28VS.71%29.aspx) large. –
Essayez de multiplier l'autre paire de System :: Int32 et System :: Int64. Je ne suis pas C# dev, juste intéressé. – foret