cout << -1/2
评估为0
-1/2
评估为-1
。为什么会这样?
答案 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函数将结果转换为整数。