1000000000 * 3 = -1294967296?

Я запуталась!

сегодня 3 ноября

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

shazbot выходит на -1294967296

да???

2 ответов


shazbot может быть long, но ни 1000000000 или DateTime.Day есть. Итак, C# делает int умножение сначала (что приводит к переполнению), а затем бросает его в long в магазине в shazbot.

если вы хотите long результат, сделайте один из них long, например:

long shazbot = 1000000000L * DateTime.Day;

Edit: C# дает вам предупреждение, если вы используете l вместо L. Зафиксированный.


бросьте долго, как это:

long shazbot = 1000000000L * DateTime.Day;