【问题标题】:Understanding Remainder operator了解余数运算符
【发布时间】:2018-09-21 08:49:25
【问题描述】:

只是做一些基本的模运算,并试图用问号来围绕下面的运算。

0%5 // 0 - Totally understand
1%5 // 1 ?
2%5 // 2 ?
3%5 // 3 ?
4%5 // 4 ?
5%5 // 0 - Totally understand

也许我想错了。例如 1/5 将返回 0.2 的 Double 而不是单个 integer 那么它如何返回 1 的余数?

我明白这些。这是有道理的,但以上我无法理解。

9%4   // 1
10%2  // 0
10%6  // 4

如果有人能解释这一点,那就太好了。看来我脑子放屁了。 Source of learning

【问题讨论】:

  • 模块有什么问题。 1 = 5 * 0 + 1。实际上 1/5 将返回 0,而不是 0.2。因为1和5是Int类型
  • 请注意,%余数运算符, 不是 模数。 比较 Negative number modulo in swift
  • 1%5 不能容纳完整的 5,所以余数是 1。因此 2 % 5 不能满足完整的 5,余数是 2。

标签: operators modulo


【解决方案1】:

来自您链接到的同一 Basic Operators 页面:

余数运算符 (a % b) 计算出 b 的倍数可以容纳在 a 中,并返回剩余的值(称为余数)。

专门针对1 % 5

5 不适合 1,所以它适合 0 次。

这意味着1可以描述为

1 = (5 * multiplier) + remainder

因为乘数是0,所以remainder1

1 = (5 * 0) + remainder
1 = remainder

如果我们改为查看6 % 5,余数也是1。这是因为5 适合6 一次:

6 = (5 * multiplier) + remainder
6 = (5 * 1) + remainder
6-5 = remainder
1 = remainder

【讨论】:

    【解决方案2】:

    这个 / 除法运算符当你说 1/5 如果除法是整数时,它会给出 0 ,但是这个 1.0/0.5 当你用 Double 时,它​​会给出0.2

    但是%当你说1%5 = 1时是模运算符,因为你有1 = 0*5 + 1,这意味着1有零个5,提醒是1

    【讨论】:

    • % 在 Swift 中不是模运算符。
    • 我认为模数和余数可以互换使用
    • 余数和模数对于负数的行为不同。严格来说,Swift 对负数的行为使其成为余数运算符。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 2016-03-13
    相关资源
    最近更新 更多