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
0
A
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)
Mögliches Duplikat [Teile von 10 bit shifts?] (http://stackoverflow.com/questions/5558492/divide-by-10-using-bit-shifts) – Ashigore
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