乐逍遥xwl

导航

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 }

 

posted on 2019-08-01 23:33  乐逍遥xwl  阅读(165)  评论(0编辑  收藏  举报