我工作的一种方法,除以2的幂仅使用二进制运算符(<< >> + ^〜&!|)有符号整数,结果必须是圆向着0我碰上了这个问题,也关于问题的Stackoverflow,我无法理解为什么它的工作原理.这是解决方案:
int divideByPowerOf2(int x, int n)
{
return (x + ((x >> 31) & ((1 << n) + ~0))) >> n;
}
Run Code Online (Sandbox Code Playgroud)
我理解这x >> 31部分(如果x是负数,则只添加下一部分,因为如果它是正数x将自动向0舍入).但令我困扰的是这(1 << n) + ~0部分.它怎么样?