本着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
似乎能解决问题!
最佳答案
我会尝试
x -= (pow2 ^ (~sgn+1)) + sgn
或者,如lijie在评论中所建议
x -= (pow2 ^ -sgn) + sgn
如果
sgn
是0
,那么~sgn+1
也是0
,所以pow2 ^ (~sgn+1) == pow2
。如果sgn
是1
,则(~sgn+1)
是0xFFFFFFFF
和(pow2 ^ (~sgn+1)) + sgn == -pow2
。