Что делает эта функция управления битами? - PullRequest
1 голос
/ 26 декабря 2011
unsigned long ccNextPOT(unsigned long x){

    x = x - 1;
    x = x | (x >> 1);
    x = x | (x >> 2);
    x = x | (x >> 4);
    x = x | (x >> 8);
    x = x | (x >>16);
    return x + 1;
}

Ответы [ 2 ]

2 голосов
/ 26 декабря 2011

Операторы OR и SHIFT заполняют единицами все биты x справа от старшего значащего бита (до 32 бит). Вместе с инструкциями перед декрементом и постинкрементом это вычисляет (как подсказывает имя функции) следующее число степеней двух, равное или большее данного числа (если x больше 0 и меньше 2 ^ 32)

0 голосов
/ 31 июля 2013

Эта функция округляет x до следующей наивысшей степени 2. Это точно код в здесь

unsigned int v; // compute the next highest power of 2 of 32-bit v

v--;
v |= v >> 1;
v |= v >> 2;
v |= v >> 4;
v |= v >> 8;
v |= v >> 16;
v++;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...