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

use*_*527 8 php perl operators modulus

我有这个PHP函数,它不适用于负数:

function isOdd($num) 
{
   return $num % 2 == 1; 
}
Run Code Online (Sandbox Code Playgroud)

但它适用于正数.

我有这个Perl例程,它执行完全相同的操作,也适用于负数

sub isOdd()
{
  my ($num) = @_;
  return $num % 2 == 1;
}
Run Code Online (Sandbox Code Playgroud)

我在翻译这个功能时犯了什么错误吗?还是PHP的bug?

cod*_*ict 20

在PHP中的结果的符号x % y是的符号分红x,但
在Perl它是的符号除数y.

所以在PHP中,结果$num % 2可以是1,-1或者0.

所以修复你的函数比较结果0:

function isOdd($num) { 
  return $num % 2 != 0; 
}
Run Code Online (Sandbox Code Playgroud)

  • @ user640527:它是一种语言设计决策.在我所知的语言中,Perl和Ruby返回除数的符号,C,C++,Java和PHP返回红利的标志. (2认同)