int中的模数vs溢出给出了不同的结果

时间:2017-12-15 15:38:13

标签: c#

我正在做advent of code第15天,作为其中的一部分我得到了意想不到的结果。我必须基本上计算16807 * 16807 * 65,并且该值不应大于int.maxValue。我注意到我的结果与预期的结果不匹配所以当我简化它时,它基本上归结为这个(未经检查的没有使用,它只是为了满足编译器):

 int a = unchecked(16807 * 16807 * 65); //1181022001
 long b = 16807L * 16807 * 65 % int.MaxValue; //1181022009

可能有一些显而易见的东西。

1 个答案:

答案 0 :(得分:2)

int.MaxValue + 1,当转换为整数(在未经检查的上下文中)时为int.MinValue( - 2,147,483,648)。 (int.MaxValue + 1L) % int.MaxValue1。所以是的,他们两者都不同,因为他们都被定义为做不同的事情。