• lowbit( )运算


    --------开始--------

    lowbit (n) 定义为非负整数n在二进制表示下“最低位的1及其后面所有的0构成的数值。

    比如: n = 10 的二进制下为1010,则lowbit (n) = (10)2 = 2

    实现:

             对于任意一个整数实现lowbit ( ) 运算是类似的,为了更加直观,这里用整数20举例,20的二进制为:10100        设最后面的1所在的位置为k(从右向左计数) 然后首先对20取反,即~20:01011     此时会发现第k为变成了0,而0 ~ k - 1 为变成了1,然后再加1,变成01100,最后拿加1后的数和最开始的整数进行&运算就是我们要计算的结果        20:1 0 1 0 0 

                &   ~20 + 1:0 1 1 0 0

            ----------------------------------------

                                     0 0 1 0 0        

    第k位前面的数通过变化后和刚开始的数是完全相反的,所以最后不会影响结果,而只有第k位是1,k位后面都是0

    仔细观察会发现:

                                     lowbit (n) = n & (~n + 1) = n & (- n)

    就是正整数n和它的负数n进行 & 运算

    lowbit ( ) 运算比较方便,我们可以统计一个整数二进制中1所在的位置,最简单的方法就是建立一个数组 a,初始化数组a的元素为a [2k] = k

    #include <iostream>

    using namespace std;
    const int max = 1 << 20;
    int n, a[max];

    int main()
    {
        for (int i = 0; i <= 20; i++)
            a[1 << i] = i;
        cin >> n;
        while (n)
        {
            int s = n & -n;
            cout << a[s] << " ";
            n -= n & -n;
        }
        //system("pause");
        return 0;
    }

    --------结束--------

  • 相关阅读:
    Hadoop2.0 HA集群搭建步骤
    了解何为DML、DDL、DCL
    搭建Hadoop平台(新手入门)
    周记1
    IT小小鸟
    Python中的函数修饰符
    python_类方法和静态方法
    Python的log模块日志写两遍的问题
    python——装饰器例子一个
    初识HIVE
  • 原文地址:https://www.cnblogs.com/chuyds/p/10743508.html
Copyright © 2020-2023  润新知