我在Python上尝试了这个。我知道使用整数和它们的除法只会返回商的整数值,截断小数部分。 在这个笔记上:
3/2 = 1
听起来完全没问题......但是当红利是负面的时候,让我理解幕后发生的事情让我难以置信?
-3 / 2 = -2
这是输出:
答案 0 :(得分:2)
浮点值不会被截断 - 它向下舍入,即向负无穷大。
答案 1 :(得分:2)
整数除法只是在最后得到的数字的底线。
3/2 -> floor(1.5) -> 1
-3/2 -> floor(-1.5) -> -2
答案 2 :(得分:0)
自然数和实数都具有(n + d)/ d等于(n / d)+1的特性。实数具有(-n)/ d等于 - (n / d)的附加属性。可以定义整数以具有上述任一属性,但不能同时定义两者。
虽然第一个属性通常在两者中更有用,但在硬件和软件中实现具有负被除数的整数除法的最简单方法是反转被除数的符号然后反转结果的符号。早期语言以这种方式执行整数除法,因为它很容易;事实上许多程序都是为了期待这种行为而写的,许多语言都在传统中继续存在。
可以说,语言最好的做法是使用“单词”运算符(例如divt
)进行除法而不是标点符号。这将允许代码指定它是否需要截断的除法或分区,愿意让编译器随意选择在任何给定方案中最快的那个,或者愿意让编译器做任何使用负数来换取使正数更快地工作(例如,在具有“无符号除法”指令的CPU上,该指令比“有符号除法”更快,这样的运算符将允许CPU使用“无符号”)。不过,我不知道任何现有的语言。