C / C ++ Bit Twiddling

в духе graphics.stanford.edu/~seander/bithacks.html Мне нужно решить следующую проблему:

int x; 
int pow2; // always a positive power of 2
int sgn;  // always either 0 or 1
// ...
// ...
if(sgn == 0)
    x -= pow2;
else
    x += pow2;

Конечно, мне нужно избегать условного. Пока что лучшее, что я придумал, - это

x -= (1|(~sgn+1))*pow2

, но это связано с умножением, которого я также хотел бы избежать. Заранее спасибо.

РЕДАКТИРОВАТЬ: Всем спасибо,

x -= (pow2^-sgn) + sgn

, похоже, помогает!

15
задан claws 27 November 2010 в 22:09
поделиться