Как разделить число с правильным битовым сдвигом на степень не 2 - PullRequest
0 голосов
/ 06 декабря 2018

Мне нужно разделить число на 12, используя операции сдвига битов.С умножением вы можете прибавлять степени 2, пока не достигнете желаемого числа, однако такой подход здесь не применим.

1 Ответ

0 голосов
/ 06 декабря 2018

Хорошо известное решение от Hackers Delight с помощью операции сдвига

unsigned divu12(unsigned n) {
 unsigned q, r;
 q = (n >> 1) + (n >> 3);
 q = q + (q >> 4);
 q = q + (q >> 8);
 q = q + (q >> 16);
 q = q >> 3;
 r = n - q*12;
 return q + ((r + 4) >> 4);
// return q + (r > 11);
}

Надеюсь, это поможет вам

...