0

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

例如,如果你做 99/10,你会得到 9,正如预期的那样,但如果你做 -99 / 10,你会得到 -10。

我验证确实是这种情况(我用比特手动完成了这个),但我不明白它背后的原因。

如果有人能用简单的语言解释为什么会发生这种情况,我将不胜感激。

4

1 回答 1

1

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

你得到了预期的结果,四舍五入。

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


编辑:谷歌搜索了一下,这篇文章提到你应该将否定作为一种特殊情况处理:

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

于 2013-04-26T13:56:16.393 回答