1000000000*3 = -1294967296?

soo*_*ise 6 c# integer-overflow

我糊涂了!

今天是11月3日

DateTime DateTime = new DateTime(2010,11,3);
long shazbot = 1000000000 * DateTime.Day;
Run Code Online (Sandbox Code Playgroud)

shazbot出现在-1294967296

咦???

Pow*_*ord 41

shazbot可能是long,但不是1000000000或是DateTime.Day.因此,C#int首先进行乘法运算(导致溢出),然后将其转换long为存储shazbot.

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

long shazbot = 1000000000L * DateTime.Day;

编辑:如果您使用l而不是,C#会给您一个警告L.固定.

  • @Soo,"l"不是一个技巧,它告诉编译器这个数字是什么.类似于"d"表示double,"f"表示float,"m"表示十进制.否则,如果提供整数文字,编译器会将其推断为整数,并且所有小数文字都将推断为double.虽然如果要使用该字符,建议使用大写字母L,因为l容易与1混淆. (7认同)
  • @RobertPitt:我注意到......奇怪的是(相对)简单的答案如何能够很快得到大量的支持,但是我花了很长时间研究和写作的答案却没有.:| (2认同)