为什么当您使用除法的乘法/移位方法(例如乘以 2^32/10,然后向右移位 32)时,您会得到预期结果减一?
例如,如果你做 99/10,你会得到 9,正如预期的那样,但如果你做 -99 / 10,你会得到 -10。
我验证确实是这种情况(我用比特手动完成了这个),但我不明白它背后的原因。
如果有人能用简单的语言解释为什么会发生这种情况,我将不胜感激。
为什么当您使用除法的乘法/移位方法(例如乘以 2^32/10,然后向右移位 32)时,您会得到预期结果减一?
例如,如果你做 99/10,你会得到 9,正如预期的那样,但如果你做 -99 / 10,你会得到 -10。
我验证确实是这种情况(我用比特手动完成了这个),但我不明白它背后的原因。
如果有人能用简单的语言解释为什么会发生这种情况,我将不胜感激。
为什么当您使用除法的乘法/移位方法(例如乘以 2^32/10,然后向右移位 32)时,您会得到预期结果减一?
你得到了预期的结果,四舍五入。
-99/10
是-9.9
向下-10
舍入的。
编辑:谷歌搜索了一下,这篇文章提到你应该将否定作为一种特殊情况处理:
请注意,在调试模式下,优化的代码可能会更慢,特别是如果您有负数和正数并且您必须自己处理符号。