Я бы посмотрел книгу восторга хакеров для такого рода вещей. У меня нет своей копии, но независимо от этого, если вы посмотрите на свой делитель 192, то есть 0xC0, так что вы можете разделить верх и низ на 0x40, смещение 8000 >> 6 = 125. 8000/192 -> 125 / 3, но тогда вы должны сделать это делить на 3. Мы знаем, что ответ будет где-то между 125/2 и 125/4. С этими конкретными числами 125 равно 0x7d или b1111101, что в 3 раза больше b100000 + 11101, что (3 раза по 0x20) + (3 раза по 8) + 5, поэтому 125/3 = 0x20 + 0x8 + (5/3) и 5/3 равно быстро определяется как больше 1, но меньше 2, так что 0x28 + 1 = 41. Сдвиг продолжает уменьшаться только в том случае, если битовая комбинация делителей продолжает появляться в верхних битах битовой комбинации числителя. Я не знаю, что восхищают хакеры или другие подобные источники говорят по этому поводу, я просто случайно заметил этот шаблон для этих конкретных чисел.

т всем, я пытаюсь разделить на константу без знака, используя только сдвиги и добавления / вычитания - у меня нет проблем с этим, если бы это было умножение, но я немного озадачен делением.

Например, допустим, что делитель константы равен 192, а дивиденд - 8000.

«полный результат» y = 8000/192 = 41 (при условии, что я не сохраняю дробные биты)

у = 8000 >> 8 ... 31 у = 8000 >> 7 ... 62

Но как мне получить более точное решение?

Большое спасибо!

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

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