Мне нужно разделить число на 12, используя операции сдвига битов.С умножением вы можете прибавлять степени 2, пока не достигнете желаемого числа, однако такой подход здесь не применим.
Хорошо известное решение от 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); }
Надеюсь, это поможет вам