我想知道如何通過僅使用位移或位運算符將整數除以另一個整數(均爲正數)來獲得餘數。不應使用/
運營商或%
運營商。移位以獲取餘數
例如,爲了獲得除數的形式爲2^k
的餘數,以下操作會得出餘數。
m = Remainder
n = The number
d = The divisor
m = n & (d - 1)
然而,該方法僅當d
的形式2^k
的。我想知道2
的非權力類似的方法。我目前working上一個problem從programming challenges
並希望採用這樣一個方法來減小程序的執行時間
難道只有在base-2中的位表示是一個限制嗎?考慮價值43/7 - 價值實際上是6.142857 ...。你認爲基礎值高於2的通用方法? – Makoto
沒有一般的方法。不過,如果您知道除數,則可以用乘法和一些移位和加/減來代替該除法。詢問任何有能力的C編譯器,它會給你任何編譯時常量的魔法值。 –
除非答案只涉及1位移位聲明,否則我敢打賭你不會擊敗javas mod運算符。 – goat