我有這個PHP函數不爲負數的工作:爲什麼模數運算符在Perl和PHP中表現不同?
function isOdd($num)
{
return $num % 2 == 1;
}
,但它爲正數。
我有這樣的Perl例程做同樣的事情併爲負數也
sub isOdd()
{
my ($num) = @_;
return $num % 2 == 1;
}
工作難道我做的翻譯功能的任何錯誤?或者它是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