与 % 运算符混淆

Confused with % operator

我有这行简单的代码,它显示为余数 5:

Console.WriteLine(5 % 8);

% 运算符显示第一个数字和第二个数字相除后的余数。所以,5 / 8 = 0,625。上面代码的提示不应该是6而不是5吗?为什么我在 Visual Studio 中测试时看到 5?

取模不是给你商的第一个数,而是第二个数除以第一个数后的余数。

8 根本不等于 5,所以余数就是完整的 5。

请参阅此答案以获得其他几个很好的解释:

How does a modulo operation work when the first number is smaller?

8 "cleanly" 变成 5 多少次?零次。

5 / 8 = 0 (int division)

当您5 ÷ 8时,还剩下多少物品? 5.

5 % 8 = 5 (modulus division)

另一种解释方式是:

你有 5 个苹果。请将这些苹果分给8组,但必须保证每组的苹果数量相等。

你不能那样做。你的苹果少于小组的数量。你不能给任何人任何个苹果。

因为您没有送出任何苹果,所以您还剩下 5 个苹果。那是你剩下的。

一切都遵循整数除法的基本规则。对于整数 xy 假设我们有:

q = x / y;
r = x % y;

基本规则是:

  • qr 都是整数
  • q * y + r == x
  • 不精确时向零除法

现在您已经了解了基本规则,您可以计算出 5 / 85 % 8 的值。

5 / 8 是一个整数。确切的值为 0.625,但这不是整数,因此我们将 舍入为零 并得到 0。所以 q0.

要计算 r,我们必须求解 q * 8 + r = 5,这很容易求解:r = 5 是解。

(请注意,还有一些关于除以零等的基本规则,您通常不必担心。)