Определение степени двойки
От: remark Россия http://www.1024cores.net/
Дата: 09.03.10 17:42
Оценка: 7 (3) +2
Иногда бывает надо проверить, что переданный аргумент — есть степень двойки, ну там например в конструкторе хэш-таблицы для начального размера. Не знаю, может это и известный приём, но я раньше мучился со вспомогательными функциями.
assert((size & (size - 1)) == 0);


з.ы. 0 тоже определяет как степень двойки


1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re: Определение степени двойки
От: wander  
Дата: 09.03.10 18:50
Оценка:
Здравствуйте, remark, Вы писали:

R>


А вот CT возведение в степень. может кому надо будет
template <long num, size_t n, size_t y = 1>
struct pow
{
    enum { value = pow<num * num, (n >> 1), n & 1 ? num * y : y>::value };
};
template <long num, size_t y>
struct pow<num, 0, y>
{
    enum { value = y };
};

Re[2]: Определение степени двойки
От: alsemm Россия  
Дата: 09.03.10 19:07
Оценка: 79 (8)
Здравствуйте, wander, Вы писали:

Биты кручу верчу запутать хочу
Re[3]: Определение степени двойки
От: vadimcher  
Дата: 09.03.10 21:01
Оценка:
Здравствуйте, alsemm, Вы писали:

A>Здравствуйте, wander, Вы писали:


A>Биты кручу верчу запутать хочу\


Это как раз ссылка, которая сразу пришла в голову. Хорошая ссылка. Всем также советую. Если забудете адрес, гуглится по "bit hacks".

А вот зайца кому, зайца-выбегайца?!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.