为什么在C ++中-1/2被评估为0,而在Python中为-1?

时间:2014-02-26 02:14:16

标签: python c++ python-2.x integer-division

  • C ++ cout << -1/2评估为0
  • Python -1/2评估为-1

为什么会这样?

4 个答案:

答案 0 :(得分:8)

C ++中的整数除法向0舍入,而在Python中,它向-infinity舍入。

在抽象中处理这些事物的人倾向于认为向负无穷大倾斜更有意义(这意味着它与数学中定义的模数函数兼容,而不是%具有某种有趣的含义)。编程语言的传统是向0舍入 - 这最初不是在C ++中定义的(当时遵循C的例子),但最终C ++(和C)以这种方式定义它,复制Fortran。

答案 1 :(得分:1)

来自Python文档(强调我的):

  

/(division)和//(floor division)运算符产生其参数的商。数字参数首先转换为通用类型。普通或长整数除法产生相同类型的整数; 结果是数学除法,其中'floor'函数应用于结果

floor函数舍入到最接近负无穷大的数字,因此为-1。

答案 2 :(得分: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是向无穷大的一轮。丢弃分数是向零的一轮。

答案 3 :(得分:-1)

我不确定python但是在C ++中整数/整数=整数因此在-1/2的情况下是-0.5,它会自动舍入为整数,因此得到0答案。 在Python的情况下,可能是系统使用floor函数将结果转换为整数。