DP>DP>int f(int x)
DP>{
DP> int minusOneBit = (x-1)&x;
DP> int e = x^minusOneBit;
DP> return minusOneBit|(e>>1);
DP>}
DP>int func(int x)
DP>{
DP> if (!(x&1))
DP> return f(x);
DP> return ~f(~x);
DP>}
DP>
func для нечетных чисел находит вовсе не предыдущее, а следующее число с равным количеством единиц
f: 11110 -> 11101
func: 00001 -> 00010
DP>Чего? Двигать? Цикл? Не, не слышал.
для нечетных чисел, похоже, тебе придется поступиться принципами и сделать цикл
0010 0000000000000000000000000011111 -> 0001 1111100000000000000000000000000