|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Yuriy Kaminskiy 2:5020/517.21 19 Jul 2001 22:03:33 To : Max Alekseyev Subject : Re: найти ближайшую бОльшую степень двойки минус 1 -------------------------------------------------------------------------------- >>>>> On 02:28 18/7/2001, Max Alekseyev <2:5015/60> writes: АМ> Число - целое 8 байт (Int64) АМ> необх найти ближайшую бОльшую АМ> степень двойки минус 1, т.е. АМ> для 4...7 - это 7; АМ> для АМ> 32...63 - это 63; MA> вот навскидку: MA> long long f(long long t) { while(t&(t+1)) t|=(t>>1); return t; } Хех. Оно, конечно, замечательно, только работает в 1.5 раза медленнее, чем вариант AM (val |= val>>1;...;val |= val>>32;) [на cyrix 6x86MX]. Ключевое слово - условный переход. MA> цикл крутится ровно столько раз, какова наибольшая длина цепочки MA> нулей в двоичной записи данного числа. -- Yuriy Kaminskiy. --- Gnus v5.2.25/XEmacs 19.14 * Origin: C2B8 59EA 497A D6F6 2640 0E49 D84A AADA EACE (2:5020/517.21@fidonet) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор Архивное /ru.algorithms/17427107dad95.html, оценка из 5, голосов 10
|