为什么模数返回这些值?

时间:2019-05-18 16:32:07

标签: c

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;

1 个答案:

答案 0 :(得分:0)

  

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

您是对的,但前提是您认识到自己是错的。

您认为太复杂了:模数不是是否存在余数的决定,而是。 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的问题。