为什么模数运算符在Perl和PHP中表现不同?
我有这个PHP函数不为负数的工作:为什么模数运算符在Perl和PHP中表现不同?
function isOdd($num)
{
return $num % 2 == 1;
}
,但它为正数。
我有这样的Perl例程做同样的事情并为负数也
sub isOdd()
{
my ($num) = @_;
return $num % 2 == 1;
}
工作难道我做的翻译功能的任何错误?或者它是PHP的错误?
在PHP的x % y
的结果的符号是被除数这是x
但
在Perl它是除数是y
的符号的符号。
因此在PHP中,$num % 2
的结果可以是1
,-1
或0
。
所以解决您的功能与0
比较结果:
function isOdd($num) {
return $num % 2 != 0;
}
但是为什么?这是基本的数学。它为什么会改变? – user640527 2011-03-02 04:35:37
@ user640527:它是一个语言设计决定。在我认识的语言中,Perl和Ruby返回了除数和C的符号,C++,Java和PHP返回了分红符号。 – codaddict 2011-03-02 04:56:04
+1(相关文档)http://www.php.net/manual/en/language.operators.arithmetic.php:“模数运算符%的结果与红利具有相同的符号 - 也就是结果$ a%$ b将具有与$ a相同的符号。“ – 2011-03-02 05:44:43
“不工作”是不是一个解释 – zerkms 2011-03-02 04:24:14
我的意思是说它给出错误的结果 – user640527 2011-03-02 04:27:33
@ user640527:和你为什么不只是看着在与1进行比较之前,'$ num%2'返回了什么? – zerkms 2011-03-02 04:28:35