【志银】#define lowbit(x) ((x)&(-x))原理详解

分析下列语句:

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

可写成下列形式:spa

int Lowbit(x) {
  return x&(-x);
}

例如:code

1> x = 1:blog

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

1 => 0000 0001io

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

1&(-1)的二进制位运算为(二个二进位都为1):二进制

因此1&(-1)=1im

2> x = 6:d3

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

6 => 0000 0110

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

6&(-6)的二进制位运算为(二个二进位都为1):

因此6&(-6)=2

总结:

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

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

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

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

                                                                                                        开始于:2016-03-1八、16:37:32

相关文章
相关标签/搜索