Страница 1 из 1

Степень числа (q)

Добавлено: 14 май 2010, 14:23
Fisher
чё-та я совсем отупел в пятницу перед отпуском.

Известно, что N - степень двойки.
Выяснить какая именно.
Ясно, что можно побитовым сдвигом посчитать, но это некрасиво,
особенно если разрядность числа велика.

А чё по-другому, без циклов никак нельзя?
Может функция какя есть, или битовое умножение хитрое.
Надо изящно.

Re: Степень числа (q)

Добавлено: 14 май 2010, 14:34
spavel
посмотри в каком бите 1 стоит.

Re: Степень числа (q)

Добавлено: 14 май 2010, 14:45
spavel
а вообще самый короткий код посачета логарифма (подгони под нужный язык) :

Код: Выделить всё

res = 0;
while (x>=2) {
        res += 1
        x /= 2
}

Re: Степень числа (q)

Добавлено: 14 май 2010, 14:50
gonzo
http://graphics.stanford.edu/~seander/bithacks.html
См. Finding integer log base 2 ...

Re: Степень числа (q)

Добавлено: 14 май 2010, 14:57
spavel
кстати, если в используемом языке есть функция логарифма (е), то можно совсем просто.

Log2(X)=lnX/ln2

ln2 посчитай на калькуляторе - это константа.

Re: Степень числа (q)

Добавлено: 14 май 2010, 15:24
Fisher
Всем спасибо, все свободны. :D