为什么模数运算符在 Perl 和 PHP 中的行为不同?
我有这个 PHP 函数,它不适用于负数:
function isOdd($num)
{
return $num % 2 == 1;
}
但它适用于正数。
我有这个 Perl 例程,它执行完全相同的操作并且适用于负数
sub isOdd()
{
my ($num) = @_;
return $num % 2 == 1;
}
我在翻译函数时犯了任何错误吗?或者是 PHP 错误?
I've this PHP function which does not work for negative numbers:
function isOdd($num)
{
return $num % 2 == 1;
}
but it works for positive number.
I have this Perl routine which does the exact same thing and works for negative number also
sub isOdd()
{
my ($num) = @_;
return $num % 2 == 1;
}
Did I make any mistake in translating the function ? or is it PHP bug ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在 PHP 中,
x % y
结果的符号是被除数的符号,即x
但在 Perl 中,它是除数的符号,即
y
。因此,在 PHP 中,
$num % 2
的结果可以是1
、-1
或0
。因此,修复您的函数,将结果与
0
进行比较:In PHP the sign of the result of
x % y
is the sign of dividend which isx
butin Perl it is the sign of the divisor which is
y
.So in PHP the result of
$num % 2
can be be either1
,-1
or0
.So fix your function compare the result with
0
: