Modulo mit Bitverschiebungen neu implementieren?
Ich schreibe einen Code für ein sehr begrenztes System, in dem der Mod-Operator sehr langsam ist. In meinem Code muss ein Modulo ungefähr 180 Mal pro Sekunde verwendet werden, und ich stellte fest, dass das Entfernen dieses Moduls die Geschwindigkeit meines Codes erheblich erhöhen würde, da ab sofort ein Zyklus meines Hauptkreises nicht in 1/60 von a ausgeführt wird zweitens, wie es sollte. Ich habe mich gefragt, ob es möglich ist, das Modulo mit nur Bitverschiebungen neu zu implementieren, wie dies mit Multiplikation und Division möglich ist. Hier ist also mein Code in C ++ (wenn ich ein Modulo mit Assembly ausführen kann, wäre es noch besser). Wie kann ich das Modulo ohne Division oder Multiplikation entfernen?
while(input > 0)
{
out = (out << 3) + (out << 1);
out += input % 10;
input = (input >> 8) + (input >> 1);
}
BEARBEITEN: Eigentlich habe ich gemerkt, dass ich es weit mehr als 180 Mal pro Sekunde machen muss. Der Eingabewert kann eine sehr große Zahl mit bis zu 40 Stellen sein.