Здравствуйте, Паблик Морозов, Вы писали:
М>>чего-чего?! мы начинаем двигать самый младший бит влево до тех пор, пока на следующей позиции не окажется нуль.
ПМ>Понял, туплю.
Чего? Двигать? Цикл? Не, не слышал.
Проверяйте:
int f(int x)
{
int minusOneBit = (x-1)&x;
int e = x^minusOneBit;
return minusOneBit|(e>>1);
}
int func(int x)
{
if (!(x&1))
return f(x);
return ~f(~x);
}
PS: переворачивать списки — не мое, там же циклы нужны