首页 > 其他 > 详细

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

时间:2019-01-07 23:55:17      阅读:314      评论:0      收藏:0      [点我收藏+]

分析下列语句

#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)

技术分享图片

所以1&(-1)=1

例2:x = 6

十进制转二进制(设位数为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-18、16:37:32

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

原文:https://www.cnblogs.com/chenzhiyin/p/zain4.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!