乘法和移位除法

问题描述:

为什么当你使用除法的乘法/移位方法(例如乘以2^32/10,然后向右移32),你会得到预期的结果减1?乘法和移位除法

例如,如果你做99/10,你会得到9,但如果你做-99/10,你会得到-10。

我证实这确实是这种情况(我用手工方式做了这些)但我无法理解它背后的原因。

如果有人能解释为什么这会发生在简单的条件下,我会感激。

为什么当您使用部门的乘法/移位法(2例如乘法^ 32/10,则转移32在右边)与您取得预期的结果减去一个负数?

您会得到预期结果,向下舍入。

-99/10-9.9这是-10向下舍入。


编辑:谷歌搜索多一点,this article提到,你应该处理的底片作为一种特殊情况:

注意,在调试模式下的优化代码可以慢,特别是如果你有正负两个数字,你必须自己处理标志

+0

是不是-9.9如果它是一个整数应该被舍入为-9?例如,如果我写“int x = -9.9;”在C中它将在变量中存储-9。 – 2013-04-26 14:01:29

+0

@DanielS C使用朝向零舍入的事实与您自己的算法的工作方式无关。但这可能不是问题,请参阅编辑。 – Kos 2013-04-26 15:24:23