下面是C++中的一些代码.如果你-2%5在python中尝试类似的结果是积极的3,而许多其他语言如c ++ C#(代码)和flash给出-2
为什么他们给-2并且一个版本比另一个更正确?
#include <cstdio>
int main(){
printf("%d\n", 2%5);
printf("%d\n", -2%5);
printf("%d\n", -2%77);
printf("%d\n", 2%-77);
printf("%d\n", -2%-77);
}
Run Code Online (Sandbox Code Playgroud)
输出:
2
-2
-2
2
-2
Run Code Online (Sandbox Code Playgroud)
如果r = a % n,那么a = n * q + r对于一些人q.这意味着你有多种选择r,取决于所选择的值q.
我建议阅读http://en.wikipedia.org/wiki/Modulo_operation,它说大多数编程语言选择r使用-n < r < n.这意味着,除非r为零,否则您有两个选择r- 一个是正数,一个是负数.不同的编程语言就是否采取正面或负面的方式做出不同的决定.您将在该页面上找到一个表格,其中总结了不同语言的作用:
r的符号与n(您在上面看到的)相同.r的符号与a(在2011标准之前,它的实现定义相同).如果你想确保在Python中得到肯定的,请使用:
r = a % n
if r < 0:
r += n
Run Code Online (Sandbox Code Playgroud)
Mar*_*cin -1
我想你应该看看下面的内容。除了使用稍微不同的算法之外,运算符优先级也很重要。尝试使用括号:
In [170]: 2%5
Out[170]: 2
In [171]: -2%5
Out[171]: 3
In [172]: (-2)%5
Out[172]: 3
In [173]: -(2%5)
Out[173]: -2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
706 次 |
| 最近记录: |