2014-02-26 105 views

回答

1

從Python文檔(重點礦山):

/(除法)和//(樓科)運營商獲得他們的論據商。數字參數首先被轉換爲通用類型。普通或長整數除法產生一個相同類型的整數; 結果是數學分割與'地板'功能適用於結果

floor函數四捨五入到最接近負無窮大的數字,因此-1。

+3

可能想要具體哪些文檔,因爲OP是要求兩種語言之間的區別。 – Borgleader

+0

這已從Python 2更改爲Python 3,是否正確? – chris

+0

@chris,引用的文本是針對Python 2的,其中'/'和'//'對整數做同樣的事情。在Python 3中,如果結果是非整數,'some_int/another_int'將返回一個浮點數。 –

-1

我不確定python,但在C++整數/整數=整數,因此在-1/2的情況下是-0.5自動舍入爲整數,因此你得到0答案。 如果Python可能是系統使用floor函數將結果轉換爲整數。

1

對於C++,從該參考文獻:http://www.learncpp.com/cpp-tutorial/32-arithmetic-operators/

這是最容易想到的除法運算符的爲具有兩個不同 「模式」。如果兩個操作數都是整數,則操作數 將執行整數除法。 整數除法將刪除任何 分數並返回一個整數值。

因此,-1/2將產生-0.5下降,得到0分數。

正如@SethMMorton所示,Python的規則是floor,這產生了-1。這裏描述:http://docs.python.org/2/reference/expressions.html

把@MikeGraham提到的條款,floor是一個向負無窮的一輪。丟棄分數是朝向零的一輪。

8

C++中的整數除法向0進行舍入,在Python中,它向-infinity舍入。

在抽象中處理這些事情的人傾向於認爲朝向負的無限更有意義(這意味着它與數學中定義的模函數相容,而不是%有一些有趣的含義)。編程語言的傳統是向0取整 - 這最初並不是在C++中定義的(當時以C語言爲例),但最終C++(和C)以這種方式定義它,並複製Fortran。

+1

「傳統」可能是由於在普及計算機上實現整數分割的方式。 APL(A程序設計語言)於1960年首次發佈,它的模運算符就像整數除法向負無窮回合一樣(餘數的符號與除數(或零)的符號相同,而不是股息) 。 – rcgldr

+0

對於不熟悉APL的人,請查看http://en.wikipedia.org/wiki/APL_%28programming_language%29 - 我會加入一些很酷的片段,但不幸的是,我需要向您展示的角色不是在unicode的正常部分和大多數電腦會barf –

相關問題