2016-03-31 9 views
0

Ich frage mich, ob es eine einfache Möglichkeit gibt, eine Zahl mit der Range [0,99] durch 10 zu teilen, indem man bitweise Operationen wie Shift, Addieren, Subtrahieren usw. durchführt eine Lösung, die in einem 8-Bit breiten Register funktionieren würde, weil ich eine Lösung sah, die eine Approximation unter Verwendung von 32 Bits umfasste.Bitweise Division durch 10

+2

Mögliches Duplikat [Teile von 10 bit shifts?] (http://stackoverflow.com/questions/5558492/divide-by-10-using-bit-shifts) – Ashigore

+0

Wenn Sie die Frage sorgfältig lesen, sage ich, dass ich mit einem 8 Bit breiten Register arbeite . Die Antwort auf diese Frage beinhaltet die Verschiebung einer Zahl um 32. – Pure

Antwort

1

die begrenzte Reichweite Given (es gibt nur 10 mögliche Ergebnisse), tun Sie besser mit einer Art von binärer Suche könnten: wenn n < 50 dann, wenn n < 30 dann, wenn n < 10 dann 0, sonst zurück, wenn n < 20 return 1 else return 2 else wenn n < 40 return 3 else return 4 else ... (handle 5..9)

0

Die angegebene Methode here kann für jede Bitbreite verallgemeinert werden. Finde (1/10) * 2 ** (Bitbreite), dann multipliziere das mit dem Divisor und die rechte Verschiebung mit der Bitbreite.

programmatisch mit Hilfe von Javascript, das ist:

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

(dies gesagt wird, es es wahrscheinlich nicht wert ist, zu versuchen, dies für sehr kleine Zahlen zu optimieren)