Re[6]: Задачи для собеседования.
От: m e  
Дата: 25.02.12 08:09
Оценка:
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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.