tla*_*ds_ 6 python modulo integer-division negative-number operand
当我在Python 3.3.0中输入这些表达式时会出现问题
-10 // 3 # -4
-10 % 3 # 2
10 // -3 # -4
10 % -3 # -2
-10 // -3 # 3
Run Code Online (Sandbox Code Playgroud)
它似乎需要近似浮点(-3.33)?并且在整数除法中向下舍入,但在模运算中它做了完全不同的事情.看起来它返回余数+/- 1并且仅根据负操作数的位置切换符号.即使在查看本网站上的其他答案之后,我也完全感到困惑!我希望有人能够清楚地解释这个我!这本书提示:回想一下这个神奇的公式a =(a // b)(b)+(a%b),但这似乎根本不能为我清除水.
-提前致谢!
编辑:这些只是我对发生的事情的个人评估(上图),我知道,我完全不在了!
a = (a // b) * b + (a % b)a: -10b: 3a // b: -4a % b: 2
替换魔术公式: -10 = -4 * 3 + 2 = -12 + 2 = -10
a: 10
b: -3a // b: -4a % b: -2
在魔术公式中: 10 = -4 * -3 - 2 = 12 - 2 = 10
所以神奇的公式似乎是正确的.
如果你定义a // b为floor(a / b)(它是),a % b应该是a - floor(a / b) * b.让我们来看看:
a: -10b: 3a % b = a - floor(a / b) * b = -10 - floor(-3.33) * 3 = -10 + 4 * 3 = 2
a // b总是很容易记住的事实(请阅读Cthulhu的第一个链接,这是Python的创建者的解释).对于负a的a % b..尝试想象开始在数表0,有b列:
b = 3:
0 1 2
3 4 5
6 7 8
9 10 11
...
Run Code Online (Sandbox Code Playgroud)
如果a是单元格中的数字,则为a % b列号:
a a % b
_______________
0 1 2 0 1 2
3 4 5 0 1 2
6 7 8 0 1 2
9 10 11 0 1 2
Run Code Online (Sandbox Code Playgroud)
现在将表扩展回负面:
a a % b
__________________
-12 -11 -10 0 1 2
-9 -8 -7 0 1 2
-6 -5 -4 0 1 2
-3 -2 -1 0 1 2
0 1 2 0 1 2
3 4 5 0 1 2
6 7 8 0 1 2
9 10 11 0 1 2
Run Code Online (Sandbox Code Playgroud)
-10 % 3会的2.消极a的a % b会来,会在这些各种各样的上下文.a % b负面b不会出现太多.
整数除法只是将最后获得的数字作为底数。
10/3 -> floor(3.33) -> 3
-10/3 -> floor(-3.33) -> -4
Run Code Online (Sandbox Code Playgroud)
另一方面,模运算遵循数学定义。