2013-04-26 91 views
0

爲什麼當你使用除法的乘法/移位方法(例如乘以2^32/10,然後向右移32),你會得到預期的結果減1?乘法和移位除法

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

我證實這確實是這種情況(我用手工方式做了這些)但我無法理解它背後的原因。

如果有人能解釋爲什麼這會發生在簡單的條件下,我會感激。

回答

1

爲什麼當您使用部門的乘法/移位法(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