2016-03-31 8 views
0

シフト、加算、減算などのビット単位の演算を行うだけで、範囲[0,99]の数値を10で簡単に分割できるかどうかは疑問でした。私は32ビットを使用して近似を行ういくつかの解決策を見たので、8ビット幅のレジスタで動作するソリューションです。限られた範囲(唯一の10の可能な結果がある)を考えると、あなたはバイナリ検索の種類ともっと良いかもしれませんビット単位の10による除算

+2

可能な複製を(これは、おそらく非常に少数のためにこれを最適化しようとすることの価値ではない、と述べています)ビットシフトを使用していますか?](http://stackoverflow.com/questions/5558492/divide-by-10-using-bit-shifts) – Ashigore

+0

質問をよく読んでいたら、私は8ビットワイドレジスタ。その質問への答えは、数字を32だけシフトすることです。 – Pure

答えて

1

:nは< 20場合のn < 50は、n個< 30そしてnは< 10であれば、その後は0それ以外を返す場合場合戻り値1 else return 2 else if else <戻り値3 else return 4 else ...(handle 5..9)

0

指定されたメソッドhereは、任意のビット幅に対して一般化できます。基本的には、(1/10)* 2 **(ビット幅)を見つけて除数で乗算し、右シフトではビット幅で乗算します。プログラムではJavaScriptを使用して

、これは次のようになります。

function bitwiseDivApprox(dividend) { 
    var divisor = 26; // Math.ceil((1/10) * Math.pow(2, 8)) 
    return (divisor * dividend) >> 8; 
} 

10で[分割の

関連する問題