cout
为什么会这样?
从Python文档(我的重点):
/(除法)和//(楼层除法)运算符产生其参数的商。数值参数首先转换为通用类型。普通或长整数除法产生相同类型的整数;结果是应用“地板”函数对结果进行数学除法。
楼层函数舍入到最接近负无穷大的数字,因此为-1。
对于C,根据本参考:http://www.learncpp.com/cpp-tutorial/32-arithmetic-operators/
最容易想到除法运算符有两种不同的“模式”。如果两个操作数都是整数,除法运算符执行整数除法。整数除法删除任何分数并返回一个整数值。
因此,-1/2
将产生-0.5
,分数下降,产生0
。
正如@SethMMorton所指出的,Python的规则是地板
,这将产生-1
。这里描述:http://docs.python.org/2/reference/expressions.html.
用迈克·格雷厄姆提到的术语来说,地板
是一个朝向负无穷大的圆。将分数降为零的圆。
整数除法在C中向0舍入,在Python中向-无穷舍入。
抽象地处理这些事情的人倾向于认为朝着负无穷大行进更有意义(这意味着它与数学中定义的模函数兼容,而不是具有某种有趣含义的%
)。编程语言的传统是舍入到0-这最初不是在C中定义的(当时遵循C的例子),但最终C(和C)以这种方式定义了它,复制了Fortran。
问题内容: 我的交互式控制台的简要记录: 到底为什么呢? 编辑: 为了对比起见,请考虑运算符。 这使得有很大的意义,因为虽然和都意味着同样的事,作为一个条件语句,他们真的是不一样的东西。 再次编辑: 更有趣的后果: 问题答案: 因为Python中的Boolean是整数的子类型。从文档中: 布尔值是两个常量对象False和True。它们用于表示真值(尽管其他值也可以视为假或真)。在数字上下文中(例如
问题内容: 为什么在Python中等于?它不应该像那样抛出异常吗? 问题答案: Wikipedia对历史进行了有趣的报道,并对以下内容的价值有不同的看法: 至少从19世纪初期开始,辩论一直在进行。当时,大多数数学家都同意,直到1821年,柯西(Cauchy)以及诸如未定义形式的表格之类的表达式才被列出。在1830年代,利比里(Libri)发表了令人信服的论点,莫比乌斯(Möbius)站在他身边。
问题内容: 运行下面的代码结果为0? 问题答案: 两个操作数(1和3)是整数,因此使用整数算术(此处为除法)。将结果变量声明为double只会导致除法后发生隐式转换。 当然,整数除法会返回除法四舍五入的真实结果。因此,0.333…此处的结果四舍五入为0。(请注意,处理器实际上不进行任何舍入,但是您仍然可以这样考虑。) 另外,请注意,如果两个操作数(数字)均以浮点数给出;3.0和1.0,甚至只是第一
问题内容: 在中,将1月定义为第0个月,而不是第1个月。是否有任何特定原因? 我已经看到很多人对此感到困惑… 问题答案: 它只是Java日期/时间API的一团糟。列出问题所在将花费很长时间(而且我确定我不知道其中一半是问题)。诚然,处理日期和时间是很棘手的,但是无论如何都是这样。 帮个忙,改用Joda Time或JSR-310。 编辑:至于原因-如其他答案所述,这很可能是由于旧的C API引起的,
问题内容: 下面是分别用和编码的简单过程(对于那些对此过程感到好奇的人,这是针对Euler项目5号问题的解决方案)。 我的问题是,下面的代码仅需9秒即可迭代,而代码完成则需要283秒(确切地说,在Python 3.4.3-64位上为283秒,在Python 2.7.9-32位上为329秒)。 到目前为止,我已经编码的两种类似的过程和与执行时间的差异,具有可比性。但是,这次,经过的时间之间存在极大的
问题内容: 为什么这个简单的计算返回0 虽然这实际上可以正确计算? 第一个例子有什么问题? 问题答案: 在Python 2中,执行整数除法时为零。由于结果小于。 您可以通过添加到脚本中来“修复”此问题。使用运算符并用于整数除法时,这将始终执行浮点除法。 另一种选择是使至少一个操作数为浮点数,例如。 在Python 3中,始终为。