2010-11-03 20 views
6

Kafam karıştı!1000000000 * 3 = -1294967296?

Bugün

DateTime DateTime = new DateTime(2010,11,3); 
long shazbot = 1000000000 * DateTime.Day; 

Shazbot -1294967296

dışarı Huh ??? geliyor 3 Kasım olduğunu Böyle uzun

+0

Hiç C# kullanmamıştım, ancak uzunluğun 32 bit olduğunu görüyoruz. İmza. ha. –

+0

@Josh, C# longs' [64-bit] (http://msdn.microsoft.com/en-us/library/ctetwysk%28VS.71%29.aspx) genişliğindedir. –

+0

Diğer System :: Int32 ve System :: Int64 çiftlerini çoğaltmaya çalışın. Ben sadece ilgilenmiyorum. – foret

cevap

41

shazbot bir long olabilir, ancak ne 1000000000 veya DateTime.Day bulunmaktadır. Yani C# int çarpımını ilk yapar (bir taşma ile sonuçlanır), shazbot içinde saklamak için long'a gönderir. Bir long sonuç istiyorsanız

, böyle bir long bunlardan biri, yapmak:

long shazbot = 1000000000L * DateTime.Day;

Düzenle: l yerine L kullanırsanız C# size bir uyarı verir. Sabit.

+0

Değerlerimi uzun süre nasıl değiştirebilirim? Convert.ToInt64? – sooprise

+1

Oyuncular mı? '(uzun) DateTime.Day' – AlexanderMP

+0

Bu" l "hile kullandım, bir çekicilik gibi çalıştı. Teşekkürler! : D – sooprise

1

Oyuncular:

long shazbot = 1000000000L * DateTime.Day; 
+1

İfadeyi uzun süre değerlendirmek için bunlardan birini "uzun" a çevirmek yeterli. –

+0

Yazmak için çok fazla. Her iki işlenene de gerek yoktur. Bir tane yeterli. İkincisi, dolaylı olarak doğru türe dökülecektir. Ya da R. Bemrose'un öne sürdüğü gibi, varsayılan int literal yerine Long literal yazmak için, bu durumda hiçbir cast gerekmeyecek. – AlexanderMP

+0

Teşekkürler, örneğimi değiştireceğim. – jlafay