为了遵循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 -= (1-2*sgn)*pow
,其中映射关系为0 -> 1
和1 -> -1
,等价于x -> (1-2x)
。 - rafak^
的优先级低于+
,因此x -= pow2^-sgn + sgn
就是x -= pow2^(-sgn+sgn)
等同于x -= pow2
。 - lijie