【问题标题】:Confused with % operator与 % 运算符混淆
【发布时间】:2018-04-01 22:37:21
【问题描述】:

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

Console.WriteLine(5 % 8);

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

【问题讨论】:

  • 如果将 5 除以 8,则商为 0,余数为 5;就是这样。
  • 您对“模”的含义感到困惑,仅此而已。这并不意味着“做浮点除法,乘以十,然后截断”。
  • 余数不应该是6吗?请进一步解释您所说的“困惑”是什么意思。
  • @BurreIfort 执行这段代码并查看结果——或者只是谷歌“整数除法余数”这个短语——Enumerable.Range(1, 20).Select(n => $"{n} % 8 == {n % 8}").ToList()。您不能为数学术语制定自己的新颖定义,并期望 .NET 框架会根据您的需要进行更改。那样不行。
  • 5 / 8 in integer 除法为零。五减零就是五。结果减去左边的操作数(分子)是余数。在浮点除法中没有余数;什么都没有了。

标签: c# operators modulo


【解决方案1】:

模数不会给您商的第一个数字,而是第二个数字之后的余数除以第一个数字。

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

有关其他几个很好的解释,请参阅此答案:

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

【讨论】:

  • 链接中的解释清楚了。我会在几分钟内接受答案。
【解决方案2】:

8 多少次“干净地”变成 5?零次。

5 / 8 = 0 (int division)

当你做5 ÷ 8时,剩下多少件? 5.

5 % 8 = 5 (modulus division)

另一种解释方式是:

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

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

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

【讨论】:

  • 数字(数学上)我可以,但苹果和梨不能。
  • 请记住,您正在处理整数。你不能有十进制数字。是的,在计算器上5/8=0.625,但使用 c# 和其他编程,它等于 0。
  • 感谢 gunr2171。现在很清楚了。我认为它应该显示零之后的内容,但我错了。感谢您的帮助。
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-29
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多