Реализовать по модулю, используя битовые сдвиги?

Я пишу некоторый код для очень ограниченной системы, где оператор мод очень медленный. В моем коде модуль нужно использовать примерно 180 раз в секунду, и я подумал, что его максимально возможное удаление значительно увеличило бы скорость моего кода, так как сейчас один цикл моего основного цикла не выполняется за 1/60 второй, как и должно быть. Мне было интересно, если бы было возможно повторно реализовать модуль, используя только битовые сдвиги, как это возможно с умножением и делением. Итак, вот мой код на C ++ (если бы я мог выполнить модуль по сборке, это было бы еще лучше). Как я могу удалить по модулю, не используя деление или умножение?

    while(input > 0)
{
    out = (out << 3) + (out << 1);
    out += input % 10;

    input = (input >> 8) + (input >> 1);
}

EDIT: На самом деле я понял, что мне нужно делать это более 180 раз в секунду. Видя, как значение ввода может быть очень большое число до 40 цифр.

Ответы на вопрос(5)

Ваш ответ на вопрос