zoukankan      html  css  js  c++  java
  • 【志银】#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):

    所以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

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    【转载】#349
    【转载】#346
    【转载】#344
    【转载】#336
    【转载】#335
    【转载】#330
    【转载】#324
    win2008远程桌面卡顿和上传慢的解决方法
    sql2005导出数据字典
    第03组 Alpha冲刺 (6/6)
  • 原文地址:https://www.cnblogs.com/chenzhiyin/p/5292798.html
Copyright © 2011-2022 走看看