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;
}
--------结束--------
lowbit( )运算的更多相关文章
- 浅谈lowbit运算
关于lowbit运算的相关知识 本篇随笔简单讲解一下计算机中位运算的一类重要运算方式--\(lowbit\)运算. lowbit的概念 我们知道,任何一个正整数都可以被表示成一个二进制数.如: \[ ...
- 算法竞赛进阶指南--lowbit运算,找到二进制下所有是1的位
// lowbit运算,找到二进制下所有是1的位 int H[37]; // 预处理 for (int i = 0; i < 36; i++) H[(1ll << i) % 37] ...
- 关于二进制——lowbit运算
lowbit(n)意思即为找出n在二进制表示下最后一位1即其后面的0所组成的数值,别的东西算法书上有,这里提出一个重要的公式 lowbit(n)=n&(~n+1)=n&(-n),这个有 ...
- ACDream - Lowbit Sum
先上题目: C - Lowbit Sum Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others ...
- 状压dp之位运算
## 一.知识 1.我们知道计算机中数据由二进制数存储,一个二进制数的一位就是计算机中数据的最小单位bit,我们有一种运算符可直接对二进制数进行位运算,所以它的速度很快. 2.C++中的位运算符有6种 ...
- 洛谷 P1582 倒水 解题报告
P1582 倒水 题目描述 一天,CC买了N个容量可以认为是无限大的瓶子,开始时每个瓶子里有1升水.接着~~CC发现瓶子实在太多了,于是他决定保留不超过K个瓶子.每次他选择两个当前含水量相同的瓶子,把 ...
- POJ3074 Sudoku
POJ3074 Sudoku 与POJ2676相比,这一题搜索时每一步都找到最好确定的点进行枚举 对于每行.每列.每个九宫格,都分别用一个9位二进制数保存还有那些数还可以填 对于每个位置,将其所在行. ...
- CF1225C p-binary
CF1225C p-binary 洛谷评测传送门 题目描述 Vasya will fancy any number as long as it is an integer power of two. ...
- 【t088】倒水
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 一天辰辰买了N个容量可以认为是无限大的瓶子,开始时每个瓶子里有1升水.接着辰辰发现瓶子实在太多了,于是 ...
随机推荐
- python发送文本邮件
#!/usr/bin/env python #coding=utf-8 #Author: Ca0Gu0 import time import smtplib from email.mime.text ...
- JS数组reduce()方法
1.语法 arr.reduce(callback,[initialValue]) reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(或者上 ...
- hdu 4870
Rating Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- nexus3的安装和使用
参考:https://www.cnblogs.com/2YSP/p/9533506.html http://www.54tianzhisheng.cn/2017/10/14/Nexus3-Maven/ ...
- selenium常用操作,查找元素,操作Cookie,获取截图,获取窗口信息,切换,执行js代码
目录: 1. 常用操作 2. 查找元素 3. 操作Cookie 4. 获取截图 5. 获取窗口信息 6. 切换 7. 执行JS代码 简介 selenium.webdriver.remote.webdr ...
- linux修改mysql表结构
增加字段: alter table [tablename] add [字段名] [字段类型] first(首位); alter table [tablename] add [字段名] [字段类型] a ...
- 费用最少的一款赛门铁克SSL证书
Symantec Secure Site SSL证书,验证域名所有权和企业信息,属于Symantec Class 3企业(OV)验证 级SSL证书,为40位/56位/128/256位自适应加密,目前连 ...
- hdu 4971 多校10最大权闭合图
/* 很明显的最大权闭合图题 */ #include<stdio.h> #include<string.h> #include<queue> using names ...
- hdu 1273最大流
#include<stdio.h> #include<string.h> #define inf 1000000000 #include<queue> #defin ...
- Element 'dependencies' cannot have character[children],because the type's content type is elemen
问题描述: Element 'xxxxxxx' cannot have character [children],because the type's content type is element- ...