回答
從Python文檔(重點礦山):
/(除法)和//(樓科)運營商獲得他們的論據商。數字參數首先被轉換爲通用類型。普通或長整數除法產生一個相同類型的整數; 結果是數學分割與'地板'功能適用於結果。
floor函數四捨五入到最接近負無窮大的數字,因此-1。
我不確定python,但在C++整數/整數=整數,因此在-1/2的情況下是-0.5自動舍入爲整數,因此你得到0答案。 如果Python可能是系統使用floor函數將結果轉換爲整數。
對於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
是一個向負無窮的一輪。丟棄分數是朝向零的一輪。
C++中的整數除法向0進行舍入,在Python中,它向-infinity舍入。
在抽象中處理這些事情的人傾向於認爲朝向負的無限更有意義(這意味着它與數學中定義的模函數相容,而不是%
有一些有趣的含義)。編程語言的傳統是向0取整 - 這最初並不是在C++中定義的(當時以C語言爲例),但最終C++(和C)以這種方式定義它,並複製Fortran。
「傳統」可能是由於在普及計算機上實現整數分割的方式。 APL(A程序設計語言)於1960年首次發佈,它的模運算符就像整數除法向負無窮回合一樣(餘數的符號與除數(或零)的符號相同,而不是股息) 。 – rcgldr
對於不熟悉APL的人,請查看http://en.wikipedia.org/wiki/APL_%28programming_language%29 - 我會加入一些很酷的片段,但不幸的是,我需要向您展示的角色不是在unicode的正常部分和大多數電腦會barf –
- 1. 爲什麼表達式(0 == 0&1 == 1)評估爲False?
- 2. 在Ruby中,爲什麼nil [1] = 1評估爲零?
- 3. 爲什麼1 [1]評估爲在javascript中未定義?
- 4. 爲什麼在VB.Net中評估爲false?
- 5. 爲什麼(2/3)在rails中評估爲0?
- 6. 在JavaScript中,爲什麼~~ Infinity評估爲0?
- 7. 爲什麼+和*分別評估爲0和1?
- 8. 爲什麼$((true == false))在bash中評估爲1?
- 9. 爲什麼「{1:'a',True:'b',1.0:'c',1.00:'d'}」評估爲「{1:'d'}」?
- 10. 爲什麼在[python]中將[] []評估爲False
- 11. 爲什麼函數對象在python中評估爲True?
- 12. 爲什麼4 ** 56在Python中評估爲5192296858534827628530496329220096L?
- 13. 爲什麼我在Python中的if語句評估爲False?
- 14. 爲什麼a = 4評估爲真,但b = 0在if條件下評估爲假?
- 15. 爲什麼cos(M_PI_2)== float(0)評估爲false? C++
- 16. 爲什麼在量角器中評估()?
- 17. 爲什麼在Scheme中不評估?
- 18. 爲什麼_ = $ = + [],++ _ +''+ $評估爲10
- 19. sizeof空結構在C中爲0,在C++中爲1爲什麼?
- 20. Common Lisp爲什麼(列表+ 1 2)評估爲('(+ 1 2)1 2)
- 21. 在JavaScript:爲什麼parseInt(「08」)評估爲零,但parseInt(08)評估罰款?
- 22. 爲什麼在Java和C中-1%26 = -1,爲什麼它在Python中是25?
- 23. 爲什麼`to_unsigned(0,4)> = -1`在運行時評估爲`FALSE`?
- 24. 爲什麼-4 <= -4評估爲真,爲什麼9> = 9在Ruby中評估爲真?
- 25. 爲什麼「(奇數和1)= 1」評估爲真?
- 26. 0 == *評估結果爲true,0 === *評估結果爲false
- 27. 爲什麼在PHP中按位〜0 = -1?
- 28. 在csh中,爲什麼4 - 3 + 1 == 0?
- 29. 爲什麼括號會在Python中引起評估?
- 30. 爲什麼gdb將sqrt(3)評估爲0?
可能想要具體哪些文檔,因爲OP是要求兩種語言之間的區別。 – Borgleader
這已從Python 2更改爲Python 3,是否正確? – chris
@chris,引用的文本是針對Python 2的,其中'/'和'//'對整數做同樣的事情。在Python 3中,如果結果是非整數,'some_int/another_int'將返回一個浮點數。 –