当前位置:  开发笔记 > 编程语言 > 正文

为什么不同编程语言的模数不同?

如何解决《为什么不同编程语言的模数不同?》经验,为你挑选了2个好方法。

Perl的

print 2 % -18;

- >

-16

TCL

puts [expr {2 % -18}]

- >

-16

但是VBScript

wscript.echo 2 mod -18

- >

2

为什么不同?



1> Nick Fortesc..:

在维基百科的答案是相当有帮助这里.

简短的总结是任何整数都可以定义为

a = qn + r

所有这些字母都是整数,和

0 <= | r | <| n |.

几乎每种编程语言都需要(a/n)*n +(a%n)= a.因此,模数的定义几乎总是取决于整数除法的定义.整数除法有两种选择,负数为2/-18 = 0或2/-18 = -1.根据您的语言的哪一个,通常会更改%运算符.

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

对于Perl来说,情况很复杂.手册页说:"请注意,当使用整数在范围内时,"%"使您可以直接访问由C编译器实现的模数运算符.此运算符不适用于负操作数,但执行速度更快. "因此,如果使用整数在范围内,它可以为Perl选择任一选项(如C).如果使用整数不在范围内,则手册说"如果$ b为负,则$ a%$ b为$ a减去$ b的最小倍数不小于$ a(即结果将小于或等于零)."



2> Jon Skeet..:

维基百科的"Modulo操作"页面解释得非常好.我不会在这里做得更好,因为我可能会犯一个微妙但重要的错误.

它的缺点是你可以用不同的方式定义"余数"或"模数",不同的语言选择了不同的选项来实现.

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有