3

我在Python上试过这个。我知道使用整数并进行除法只会返回商的整数值,截断小数部分。在此说明:

3 / 2 = 1

听起来完全没问题...但是当股息为负时,我很难理解幕后发生的事情?

-3 / 2 = -2

这是输出:

在此处输入图像描述

4

3 回答 3

2

浮点值不会被截断 - 它向下舍入,即朝负无穷大。

于 2013-11-10T13:51:37.230 回答
2

那里的整数除法只占最后获得的数字的底数。

3/2  -> floor(1.5)  ->  1
-3/2 -> floor(-1.5) -> -2
于 2013-11-10T13:52:34.563 回答
0

自然数和实数都具有 (n+d)/d 等于 (n/d)+1 的性质。实数具有 (-n)/d 等于 -(n/d) 的附加属性。可以将整数定义为具有上述任一属性,但不能同时具有两者。

虽然第一个属性通常是两者中更有用的,但在硬件和软件中实现带负被除数的整数除法的最简单方法是反转被除数的符号,然后反转结果的符号。早期语言以这种方式执行整数除法是因为它很容易。事实上,许多程序都是为了期待这种行为而编写的,许多语言都延续了这一传统。

可以说,一种语言最好的做法是使用“单词”运算符(例如divt)进行除法而不是标点符号。这将允许代码指定它是否需要截断除法或下限除法,愿意让编译器任意选择在任何给定情况下最快的,或者愿意让编译器用负数做任何事情以换取正数工作得更快(例如,在具有“无符号除法”指令的 CPU 上,该指令比“有符号除法”更快,这样的运算符将允许 CPU 使用“无符号”指令)。不过,我不知道任何当前的语言可以做到这一点。

于 2014-02-09T21:29:10.610 回答