我爲一個項目使用PHP,我期望-1 % 4
返回3
。然而,最後的結果是在PHP -1
,我不知道爲什麼:-1%4的正確答案是什麼?
php > echo -1 % 4;
-1
我在Ruby的IRB檢查,結果是3
:
irb(main):001:0> puts -1 % 4
3
我爲一個項目使用PHP,我期望-1 % 4
返回3
。然而,最後的結果是在PHP -1
,我不知道爲什麼:-1%4的正確答案是什麼?
php > echo -1 % 4;
-1
我在Ruby的IRB檢查,結果是3
:
irb(main):001:0> puts -1 % 4
3
,因爲它在分工來定義,例如:
a%b == a - (a/b)*b
對於具有負面結果的部門,有兩種可能的定義;要麼你向零轉彎,要麼你轉向負無窮。不同的編程語言已經做出了不同的選擇。
請參閱http://en.wikipedia.org/wiki/Modulo_operator#Remainder_calculation_for_the_modulo_operation瞭解更多信息。
我可以看到這個錯誤,但不會計算出'a - a'從而創建0嗎? – 2012-03-24 20:57:45
@RobinCastlin:不,因爲這是在整數算術中執行的。 – 2012-03-24 20:58:55
在這兩種特定語言中,當處理涉及負操作數的整數分割時,PHP將結果向零迴繞,而Ruby向-infinity迴繞。
在PHP中,從Arithmetic Operators:
模數運算符
%
的結果具有相同的符號作爲被除數。
在Ruby,從Numeric#divmod
:
商數朝向-infinity四捨五入
%手段'-1 MOD(4)'和其在數學 – safarov 2012-03-24 20:56:30
等於-1 @ safarov:實際上,'%'通常被定義爲**餘數**運算符,它具有較少定義的數學定義。 – 2012-03-24 20:59:56
@safarov「數學」是一個廣泛的聲明。如果你正在處理Z_4,-1和3是同一個對象。 – Dougal 2012-03-24 21:00:28