【问题标题】:Why does modulus return these values? [duplicate]为什么模数会返回这些值? [复制]
【发布时间】:2019-10-05 15:21:26
【问题描述】:

5%5 为 0

5%4 是 1

5%3 是 2

5%2 是 1

5%1 为 0

这是为什么呢?根据我的理解,模数只是打印出它是否有余数,但我在这里显然错了。

5%10 也打印出 5,“%10”似乎始终打印出任何值的最后一个数字。由于某种原因,123%10 是 3。

这是怎么回事?

x = 5%2;
y = 123%10;

【问题讨论】:

  • 您认为每种情况下的结果应该是什么? 5除以5的余数是多少?它只除一次,余数为0,因为它完全除。
  • 在 SO 提问之前,您是否尝试过 google 一下?
  • % 运算符正在执行整数除法。将 5 除以 2,得到 2 余数 1。这是小学的东西。
  • 当您使用十进制数字时,% 10 总是给出最后一位数字并非偶然。
  • 请阅读重复的问题,其中至少有十几个答案。希望您能从中得到满意的理解。

标签: c


【解决方案1】:

根据我的理解,模数只是打印出它是否有余数,但我在这里显然错了。

你是对的,但前提是你承认自己错了。

你想得太复杂了:模数不是决定是否有余数,而只是余数。因此,0 表示“没有提醒”,因此可以在布尔上下文中使用模运算。

这显然留下了“除法余数”的含义。

划分本身就是一个问题“如果我有 X 个对象并将其分发给 Y 个目标,每个接收者会得到多少?”

当我可以分割单个对象时,结果会有所不同。

假设我有 25 欧元(或 $ 或其他什么)并想将它们分配给 4 个人。然后我们都假设每个人都有权获得 6,25 欧元。但是如果我有 1 欧元硬币会怎样?然后我只能向每个人分配 6 欧元,我将剩下 1 欧元,无法公平分配。

所以这显示了 25 / 4 的两个可能结果:

  • 在浮点除法中,我得到 6.25,反向运算 6.25 * 4 再次得到 25,即原始值。
  • 在整数除法中,我得到 6。但反向运算 6 * 4 得到的不是 25,而是 24,所以我有余数 1。

换句话说:x / y 的余数是x - (x / y) * y 的结果。

如果仍有疑问,维基百科也有关于 modulo operation 的引理。

【讨论】:

  • 这里的问题是,显然有一个“剩余”的概念,我在学校(似乎在小学)从未学过,而且在初中或高中时也从未再次使用过。我什至看不到这样做的目的,现在试图弄清楚如何使用它进行编程使它看起来更加混乱。
猜你喜欢
  • 2017-02-11
  • 2015-09-12
  • 1970-01-01
  • 2016-09-24
  • 1970-01-01
  • 2020-06-05
  • 2016-02-20
  • 2011-06-15
  • 1970-01-01
相关资源
最近更新 更多