Sono confuso!1000000000 * 3 = -1294967296?
Oggi è il 3 novembre
DateTime DateTime = new DateTime(2010,11,3);
long shazbot = 1000000000 * DateTime.Day;
shazbot esce per -1.294,967296 millions
Eh ???
Sono confuso!1000000000 * 3 = -1294967296?
Oggi è il 3 novembre
DateTime DateTime = new DateTime(2010,11,3);
long shazbot = 1000000000 * DateTime.Day;
shazbot esce per -1.294,967296 millions
Eh ???
shazbot
può essere un long
, ma né 1000000000
o DateTime.Day
sono. Quindi, C# compie prima la moltiplicazione int
(che si traduce in un overflow) quindi la inserisce in un long
da memorizzare in shazbot
.
Se si desidera un risultato long
, fare uno di loro un long
, come questo:
long shazbot = 1000000000L * DateTime.Day;
Edit: C# ti dà un messaggio di avviso se si utilizza l
invece di L
. Fisso.
Come posso convertire i miei valori in long? Convert.ToInt64? – sooprise
Cast? '(long) DateTime.Day' – AlexanderMP
Ho usato quel trucco" l ", ha funzionato come un incantesimo. Grazie! : D – sooprise
Fusioni a lungo in questo modo:
long shazbot = 1000000000L * DateTime.Day;
Basta castarne uno a "long" per ottenere l'espressione da valutare quanto a lungo. –
Troppo da scrivere. Non è assolutamente necessario eseguire il cast di entrambi gli operandi. Uno è sufficiente. Il secondo sarà implicitamente inserito nel giusto tipo. Oppure, come suggerito da R. Bemrose, scrivere un letterale Long invece del valore letterale int predefinito, in modo che in questo caso non sia necessario alcun cast. – AlexanderMP
Grazie cambierò il mio esempio. – jlafay
Non ho mai usato C# ma sembra che il tuo lungo sia 32 bit. Firmato. eh. –
@Josh, in C# 'longs' sono [64-bit] (http://msdn.microsoft.com/en-us/library/ctetwysk%28VS.71%29.aspx) di larghezza. –
Prova a moltiplicare altre coppie di System :: Int32 e System :: Int64. Non sono C# dev, sono solo interessato. – foret