LowBit原理

lowbit(x)是x的二进制表达式中最低位的1所对应的值。

比如,6的二进制是110,所以lowbit(6)=2。

最近回头看树状数组,发现关于lowbit()函数,目前有两种算法。

第一种是比较常见的,也是我一直在用的:

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

最近发现了另一种算法,如下所示:

int lowbit(int x)
{
    return x&(x^(x-1));
}

两种算法的结果都是对的。
相比之下,第一种算法利用了负整数的补码特性,非常的巧妙,而第二种算法用另外一种方式计算出了最低位,其思想跟补码的也很相似。当然还是推荐第一种,不仅巧妙而且好记。

posted @ 2020-11-02 14:18  Mirage_c  阅读(287)  评论(0)    收藏  举报