乘法和移位划分

时间:2013-04-26 13:52:18

标签: bit-manipulation

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

例如,如果你按照预期的99/10获得9,那么如果你做到-99 / 10则得到-10。

我确认这确实是这种情况(我手动用比特做了)但我无法理解背后的原因。

如果有人能用简单的术语解释为什么会这样,我会很感激。

1 个答案:

答案 0 :(得分:1)

  

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

你得到预期的结果,向下舍入。

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


编辑:Google搜索了一下,this article提到你应该作为一个特例来处理否定:

  

请注意,在调试模式下,优化的代码可能会更慢,,特别是如果您同时拥有负数和正数,并且您必须自己处理该符号