dans l'esprit de graphics.stanford.edu/~seander/bithacks.html que je dois résoudre le problème suivant:C/C de Bit bidouilles
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;
Bien sûr, je dois éviter le conditionnel. Jusqu'à présent, le meilleur que j'ai trouvé est
x -= (1|(~sgn+1))*pow2
mais cela implique une multiplication que je voudrais également éviter. Merci d'avance.
EDIT: Merci à tous,
x -= (pow2^-sgn) + sgn
semble faire l'affaire!
vous devez accepter la réponse, alors. – Simone
Lorsque la multiplication n'est pas un problème, nous avons aussi: 'x - = (1-2 * sgn) * pow', en utilisant le mapping' 0 -> 1' et '1 -> -1', ce qui équivaut' x - > (1-2x) '. – rafak
encore une fois, parenthèses! la précédence de '^' est inférieure à '+', donc 'x - = pow2^-sgn + sgn' est' x - = pow2^(- sgn + sgn) 'est' x - = pow2'. – lijie