与%运算符混淆

时间:2017-10-20 17:37:56

标签: c# operators modulo

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

Console.WriteLine(5 % 8);

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

3 个答案:

答案 0 :(得分:2)

8次“干净地”进入5次?零次。

5 / 8 = 0 (int division)

执行5 ÷ 8时,遗留了多少项? 5。

5 % 8 = 5 (modulus division)

另一种解释方法是:

你有5个苹果。请将这些苹果分配到8组,但必须确保每组都有相同数量的苹果。

你做不到。苹果的数量少于组数。你不能把任何苹果给任何人。

因为你没有给任何苹果,所以你留下了 5个苹果。那是你的余生。

答案 1 :(得分:2)

一切都遵循整数除法的基本规则。对于整数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是解决方案。

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

答案 2 :(得分:0)

Modulo没有给你第一个商数,但是第二个数之后的余数除以第一个数。

8根本没有进入5,所以剩下的就是5。

有关其他一些好的解释,请参阅此答案:

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