的Perl

print 2 % -18;

- >

-16

的Tcl

puts [expr {2 % -18}]

- >

-16

但VBScript的

wscript.echo 2 mod -18

- >

2

为什么不同?

有帮助吗?

解决方案

维基答案是相当有帮助这里。

一个简短摘要是任何整数可以被定义为

α= QN + R

,其中所有这些字母是整数,和

0 <= | R | <| N |。

几乎每一个

编程语言将要求(A / N)* N +(A%N)=一个。因此,模量的定义几乎总是依赖于整数除法的定义。有两种选择为整数除法由负数2 / -18 = 0或2 / -18 = -1。根据哪一个是你的语言通常会改变%操作真实的。

这是因为2 =( - 1)* -18 +(-16)和2 = 0 * -18 + 2

有关的Perl情况复杂。 手册页面说:“请注意,当使用整数的范围是,”% “给你取模运算直接访问由你的C编译器实现的,这算不算为负的操作数,以及定义,但它会执行得更快。”因此,它可以选择为Perl(如C)两个选项,如果使用整数在适用范围。如果使用整数不在范围内,手册上说:“如果$ b为负,则$一%$ b为$负的$最小倍数b是不超过$少(即结果将小于或等于零)“。

其他提示

维基百科的“模操作” 页解释了它相当不错。我不会尝试做任何更好的在这里,因为我可能会做一个细微但重要的错误。

它的摩擦是可以以不同方式定义“余数”或“弹性模量”,并且不同的语言选择不同的选项来实现。

分割数和除数,其中之一为负后,必须以至少两种方式将它们分离成商和余数,使得商*除数+余数=数:您可以圆形的商向负无穷大,或接近零。

许多语言只是选择之一。

我无法抗拒指出 Common Lisp的报价两者。

蟒,当然,明确地通知你

>>> divmod(2,-18)
(-1, -16)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top