为什么模数运算符在Perl和PHP中表现不同?

时间:2011-03-02 04:21:48

标签: php perl operators modulus

我有这个PHP函数,它对负数不起作用:

function isOdd($num) 
{
   return $num % 2 == 1; 
}

但它适用于正数。

我有这个Perl例程,它完全相同,也适用于负数

sub isOdd()
{
  my ($num) = @_;
  return $num % 2 == 1;
}

我在翻译这个功能时有错吗?还是PHP bug?

1 个答案:

答案 0 :(得分:20)

在PHP中,x % y结果的符号是被除数的符号,即x但是 在Perl中,它是除数的符号,即y

因此,在PHP中,$num % 2的结果可以是1-10

因此,请修复您的函数,将结果与0进行比较:

function isOdd($num) { 
  return $num % 2 != 0; 
}