lowbit运算

Posted xwl3109377858

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lowbit运算相关的知识,希望对你有一定的参考价值。

 

lowbit(n)定义为非负整数n,在二进制表示下“最低位的1及其后面所有的0” 构成的数值。
例如 n=10 二进制表示为(1010),则 lowbit (n) = 2 (10),
当我们对计算出的 lowbit(n) 进行取log2操作 后,我们可以得到“n的二进制表示下最低位1的位置”,
为了 得到n的二进制表示下所有1的位置 ,我们需要不断的把 n 赋值为 n-lowbit(n) ,直到n=0结束 。

具体见代码 ,

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<algorithm>
 6 #include<map>
 7 #include<set>
 8 #include<vector>
 9 #include<queue>
10 #include<stack>
11 #include<list>
12 #include<unordered_map>
13 using namespace std;
14 #define ll long long 
15 const int mod=1e9+7;
16 const int inf=1e9+7;
17 
18 //const int maxn=
19 
20 int lowbit(int n)
21 
22     return n & (-n);
23 
24 
25 int main()
26 
27     ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
28     int num;
29     while(cin>>num)
30     
31         int temp=num;    
32         temp=num;    
33         while(temp)
34         
35             int x=lowbit(temp);        
36             temp-=x;        
37             x=log2(x);        
38             cout<<x<<endl; 
39                     
40     
41     return 0;
42 

 

以上是关于lowbit运算的主要内容,如果未能解决你的问题,请参考以下文章

lowbit() 运算

关于二进制——lowbit运算

位运算AcWing 801. 二进制中1的个数(lowbit)

[E位运算] lc191. 位1的个数(位运算+lowbit()+水题)

51nod 3216位运算(lowbit)授勋

51nod 3216位运算(lowbit)授勋