en el espíritu de graphics.stanford.edu/~seander/bithacks.html que necesito para resolver el siguiente problema:C/C++ Bit haciendo girar
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;
Por supuesto que necesita para evitar el condicional. Hasta ahora, lo mejor que se me ocurrió es
x -= (1|(~sgn+1))*pow2
pero eso implica una multiplicación que también me gustaría evitar. Gracias por adelantado.
EDIT: Gracias a todos,
x -= (pow2^-sgn) + sgn
parece hacer el truco!
debe aceptar la respuesta, entonces. – Simone
Cuando la multiplicación no es un problema, también tenemos: 'x - = (1-2 * sgn) * pow', usando el mapeo' 0 -> 1' y '1 -> -1', que es igual a' x - > (1-2x) '. – rafak
una vez más, paréntesis! la precedencia de '^' es menor que '+', entonces 'x - = pow2^-sgn + sgn' es' x - = pow2^(- sgn + sgn) 'es' x - = pow2'. – lijie