gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 23:10:16 25 4
gpt4 key购买 nike

Perl

print 2 % -18;

-->

-16

TCL

puts [expr {2 % -18}]

-->

-16

但是 VBScript

wscript.echo 2 mod -18

-->

2

为什么会有差异?

最佳答案

wikipedia answer在这里相当有帮助。

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

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 来说,情况很复杂。 The manual page说:“请注意,当使用整数在范围内时,“%”可以让您直接访问由 C 编译器实现的模运算符。该运算符对于负操作数的定义不那么明确,但它会执行得更快。“所以它如果使用整数在范围内,则可以为 Perl(如 C)选择任一选项。如果使用整数不在范围内,手册上说“如果$b是负数,则$a%$b是$a减去$b的不小于$a的最小倍数(即结果将小于或等于零)。”

关于perl - 为什么不同的编程语言中模数不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/450410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com