1000000000 * 3 = -1294967296? - PullRequest
       20

1000000000 * 3 = -1294967296?

6 голосов
/ 03 ноября 2010

Я в замешательстве!

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

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

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

Ха ???

Ответы [ 2 ]

41 голосов
/ 03 ноября 2010

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

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

long shazbot = 1000000000L * DateTime.Day;

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

1 голос
/ 03 ноября 2010

В ролях долго, как это:

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