Я пытаюсь определить следующее и предыдущее четное число с побитовыми операциями.добавить и удалить последний бит
Так, например, для следующей функции:
x nextEven(x)
1 2
2 2
3 4
4 4
и предыдущая:
x previousEven(x)
1 0
2 2
3 2
4 4
у меня была идея для nextEven
функции что-то вроде: value = ((value+1)>>1)<<1;
И для previousEven
функционирует примерно так: value = ((value)>>1)<<1
есть лучший подход ?, без сравнения и просмотра, если значения четные или нечетные.
спасибо.
Лучший подход _is_ сравнение значений, чтобы увидеть, четные или нечетные. Такие хитрости могут показаться умными, но они редко бывают. Сначала оптимизируйте для удобства чтения. Только перейдите к оптимизации производительности, когда вы определили конкретное узкое место. Я гарантирую, что разница между compare/set и multi-bit-ops не стоит по сути незаменимого кода. – paxdiablo