Как определить разрядность целого числа используя побитовый сдвиг на языке Си?
Необходимо определить разрядность целого числа используя побитовый сдвиг, возможно использование побитовых операций, без использования for, while, библиотеки bitset. Система счисления 16-ая. Разрядность - то есть количество числовых разрядов, необходимых для записи этого числа в той или иной системе счисления.
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Ну, если именно шестнадцатеричная, без циклов и со сдвигом...
int digits16(unsigned long long n, int res = 0)
{
if (n == 0) return res;
return digits16(n >> 4, res + 1);
}
Годится? Правда, для нуля вернет ноль, но тут надо разобраться в условии задания, что именно надо вернуть для нуля — нуль или один...
int digits16(unsigned long long n, int res = 0)
{
return n == 0 ? res : digits16(n >> 4, res + 1);
}