首页 > 其他 > 详细

lowbit() 运算

时间:2018-07-14 13:52:31      阅读:215      评论:0      收藏:0      [点我收藏+]

【算法】

  lowbit()运算取出非负整数n二进制表示下最低位的1及其后的0表示的值:

    对n按位取反后加1(即补码操作,-n),最低位1即其后位的表示不变,而之前的每一位均取反了,于是按位与即得到所需的值。

    

(~n + 1) & n 等价于 (-n) & n

  

【应用】

  1.树状数组

  2.配合Hash找出n二进制表示下为1的位

 1 #include <bits/stdc++.h>
 2 #define MAX_N  1<<20
 3 using namespace std;
 4 int n;
 5 int H[MAX_N + 1];
 6 int main()
 7 {
 8     for(int i = 0; i <= 20; i++)
 9         H[i << 1] = i;   //2的i次方下标处存i,预处理
10     while(cin >> n) {
11         while(n > 0) {
12             cout << H[n & -n] <<  ;
13             n -= n & -n;
14         }
15     }
16     return 0;
17 }

 

lowbit() 运算

原文:https://www.cnblogs.com/Willendless/p/9309343.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!