为什么当你使用除法的乘法/移位方法(例如乘以2 ^ 32/10,然后向右移32)时,你会得到预期的结果减去1?
例如,如果你按照预期的99/10获得9,那么如果你做到-99 / 10则得到-10。
我确认这确实是这种情况(我手动用比特做了)但我无法理解背后的原因。
如果有人能用简单的术语解释为什么会这样,我会很感激。
答案 0 :(得分:1)
为什么当你使用除法的乘法/移位方法(例如乘以2 ^ 32/10,然后向右移32)时,你会得到预期的结果减去1?
你得到预期的结果,向下舍入。
-99/10
为-9.9
,-10
向下舍入。
编辑:Google搜索了一下,this article提到你应该作为一个特例来处理否定:
请注意,在调试模式下,优化的代码可能会更慢,,特别是如果您同时拥有负数和正数,并且您必须自己处理该符号。