1000000000 * 3 = -1294967296?

时间:2010-11-03 14:12:10

标签: c# integer-overflow

我很困惑!

今天是11月3日

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

shazbot出现-1294967296

咦???

2 个答案:

答案 0 :(得分:41)

shazbot可能是long,但1000000000DateTime.Day都不是。因此,C#首先int乘法(导致溢出)然后将其强制转换为long以存储在shazbot中。

如果您想要long结果,请将其中一个设为long,如下所示:

long shazbot = 1000000000L * DateTime.Day;

编辑:如果您使用l而不是L,C#会向您发出警告。固定的。

答案 1 :(得分:1)

像这样长期投射:

long shazbot = 1000000000L * DateTime.Day;