#define lowbit(x) ((x)&(-x))原理详解

Posted 志银

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#define lowbit(x) ((x)&(-x))原理详解相关的知识,希望对你有一定的参考价值。

#define lowbit(x) ((x)&(-x)) 

也可以写成如下形式:

int Lowbit(x) {

  return x&(-x);

}

例如:

1> x = 1:

十进制转二进制(设位数为8):

1 => 0000 0001

-1=> 1111 1111(此处为1的补码)

1&(-1)的二进制位运算为(同1异0):

技术分享

所以1&(-1)=1

2> x = 6:

十进制转二进制(设位数为8):

6 => 0000 0110

-6=> 1111 1010(此处为6的补码)

6&(-6)的二进制位运算为(同1异0):

技术分享

所以6&(-6)=2

总结:

求出2^p(其中p: x 的二进制表示数中, 右向左数第一个1的位置),

如6的二进制表示为110,向左数第零个为0,第一个为1,则p=1,

故Lowbit(6) = 2^1 = 2。

或直接理解为:二进制按位与运算,返回不大于x的2的最大次方因子

                                                                                                        开始于:2016-03-18、16:37:32

以上是关于#define lowbit(x) ((x)&(-x))原理详解的主要内容,如果未能解决你的问题,请参考以下文章

树状数组的两个操作的证明

树状数组的两个操作的证明

lowbit()操作

树状数组lowbit()函数原理的解释 x&(x^(x-1)) x&-x

lowbit

luogu3374/3368 树状数组