Двоичная математика - PullRequest
2 голосов
/ 15 мая 2009

Если я знаю число y и знаю, что 2 ^ x = y, как мне вычислить x?

Ответы [ 4 ]

11 голосов
/ 15 мая 2009

Функция логарифма основания 2:

log2(y)

, что эквивалентно:

log(y) / log(2)

для произвольной базы.

2 голосов
/ 15 мая 2009

И если у вас нет удобной функции log, вы всегда можете увидеть, сколько раз вы должны разделить y на 2, прежде чем оно станет 1. (Предполагается, что x положительное и целое число.)

2 голосов
/ 15 мая 2009

Если вы уверены, что это степень 2, то вы можете написать цикл и сдвигать число вправо до тех пор, пока не получите 1. Число выполненных циклов будет равно x.

Пример кода:

int power(int num)
{
    if(0 == num)
    {
        return 0;
    }

    int count = 0;
    do
    {
        ++count;
        num = num >> 1;
    }while(! (num & 1) && num > 0);
    return count;
}
0 голосов
/ 18 мая 2009

Если x - положительное целое число, то следующий код будет более эффективным ..

   unsigned int y; // You know the number y for which you require x..
   unsigned int x = 0; 

   while (y >>= 1) 
   {
         x++;
   }

х ответ!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...