位运算 进制转化 STL中bitset用法
2017-08-17 16:27:29
writer:pprp
/*
题目名称:输入十进制以二进制显示
程序说明:同上
作者:pprp
备注:无
日期:2017/8/17
*/
#include <iostream> using namespace std; int main()
{
int number, s[]; cin >> number; for(int i = ; i <= ; i++)
s[i-] = number >> (i - ) & ; for(int i = ; i >= ; i--)
cout << s[i] <<"";
cout << endl; return ;
}
以上的这个算法把我坑坏了虽然是正确的,但是建议用下边的个来转化为二进制
正确代码如下:
//转化为二进制
//test:ok
void tenTwo(int tmp)
{
memset(bt,,sizeof(bt));
int i = ;
while(tmp)
{
bt[i++] = tmp%;
tmp /= ;
}
}
二进制转为十进制
//转化为十进制
//test:ok
ll twoTen(int a[])
{
ll ans = ;
for(int i = ; i < N ; i++)
{
ans += ( << i ) * a[i];
}
return ans;
}
按位与运算& 用来判断一个数某一位
按位或运算 | 用来改变一个数
异或^ (a xor b)xor b = a;这个可以用来解密
/*
name:解密
declare:同上
writer:pprp
more:无
date:2017/8/17
*/ #include <iostream>
#include <cstdio>
#include <cstring> using namespace std; int main()
{
int a = ;
int b; while(cin >> b)
{
int c = a ^ b;
cout << c << endl;
c = c ^ b ;
cout << c << endl;
}
return ;
}
异或用法的一道例题:
/*
name:输入二进制以十进制显示
declare:同上
writer:pprp
more:无
date:2017/8/17
*/ #include <iostream>
#include <cstdio>
#include <cstring> using namespace std; int main()
{
int a = ;
int b; while(cin >> b)
{
int c = a ^ b;
cout << c << endl;
c = c ^ b ;
cout << c << endl;
}
return ;
}
/*
name:找丢失的数字
declare:有一组连续的数据,从1到n排列,
中间丢失了一个数字,顺序也被打乱,
放在一个n-1的数组中,请找到丢失的数字;
writer:pprp
more:异或的用法 a ^ a = 0
date:2017/8/17
*/ #include <iostream>
#include <cstdio>
#include <cstring> using namespace std; int Find(int * a, int Size)
{
int num = ;
for(int i = ; i < Size; i++)
{
num = num ^ (i + ) ^ a[i];
}
num ^= (Size + );
return num;
} int main()
{
int a[] = {,,,,,,,,,};
cout << Find(a, ) << endl;
return ;
}
常用的二进制位变换操作
最后一位取反 x ^
把右数第k为取反 x ^ ( << (k - ))
把右数第k为变成1 x | ( << (k - ))
把右数第k为变成0 x & ~( << (k - )) \
把末k为取反 x ^ (( << k) - )
把末k位变成1 x | (( << k) - )
在状态压缩中的应用:
A = 表示 A = {, , }
常见操作:
并集操作 A | B
交集操作 A & B
集合的差 A| ~B
补集 -~A
加入第i个元素 A = A | ( << i)
删除第i个元素 A = A | ~( << i)
判断第i个元素 A | ( << i) <>
bitset用法讲解:
/*
name:bitset模板
writer:pprp
declare:bitset各种用法详解
date:2017/8/17
*/ #include <iostream>
#include <bitset>
#include <string> using namespace std; string temp = "";
bitset<> bit(temp); void out()
{
for(int i = ; i < ; i++)
{
cout << bit[i];
}
cout << endl;
}
int main()
{
//构造函数1
bitset<> bin1;
bin1[] = ;
bin1[] = true;
bin1[] = ;
bin1[] = false;
cout << bin1[] << bin1[] << bin1[] << bin1[] << endl; //构造函数2
bitset <> bin2();
for(int i = ; i < ; i++)
cout << bin2[i];
cout << endl;
//构造函数3
string tmp = "";
bitset<>bin3(tmp);
for(int i = ; i < ; i++) //从左向右依次填入
cout << bin3[i]; //构造函数4
string tmp1 = "";
bitset<>bin4(tmp1,);//从第四位开始取值
for(int i = ; i < ; i++) //还是从左向右依次填入
cout << bin4[i]; //构造函数5
string tmp2 = "";
bitset<>bin5(tmp2,,);//从第四位开始取值取5位
for(int i = ; i < ; i++) //还是从左向右依次填入
cout << bin5[i];
cout << endl; //其他函数
cout <<"test"<<endl; out(); cout << bit.any() << endl;//是否存在1的位 cout << bit.none() << endl;//是否都为0 cout << bit.count() << endl;//进制为1的个数 cout << bit.size() << endl;//进制的长度 bit.flip(); //按位取反
out(); bit.flip(); //第0位取反
out(); for(int i = ; i < ; i++)
cout << bit.operator[](i) ; //取第i位的值
cout << endl; bit.set();
out(); bit.reset();
out(); bit.set();
out(); bit.reset();
out(); cout << bit.test() << endl;//第0号是否为1 bit.set(); int x = bit.to_ulong();//转为整数
cout << x << endl; return ;
}
位运算 进制转化 STL中bitset用法的更多相关文章
- 玩家属性同步优化-脏数据标记(位运算、数组、stl之bitset)
把大神的帖子中一部分摘抄出来,结合自己写的位运算代码和循环代码(数组遍历)进行性能测试分析并给出结果. 摘自: https://www.gameres.com/827195.html 本文适用于所有脏 ...
- java------常见的进制、不同进制在代码中的表现形式、进制之间的转化、分辨率、三原色、计算机的存储规则
常见的进制: 常见的进制:二进制.八进制.十进制.十六进制 不同进制在代码中的表现形式: 进制之间的转化: 二进制转十进制: 普通方法: 快捷方法: 八进制转十进制: 十六进制转十进制: 总结: 分辨 ...
- 汇编:1位16进制数到ASCII码转换
;============================ ;1位16进制数到ASCII码转换 ; { X+30H (0≤X≤9) ;Y= { ; { X+37H (0AH≤X≤0FH) DATAS ...
- 《N诺机试指南》(五)进制转化
进制转化类题目类型: 代码详解及注释解答: //进制转化问题 #include <bits/stdc++.h> using namespace std; int main(){ // 1 ...
- CF459C Pashmak and Buses (构造d位k进制数
C - Pashmak and Buses Codeforces Round #261 (Div. 2) C. Pashmak and Buses time limit per test 1 seco ...
- 【风马一族_C】进制转化
#include "stdio.h" #include "Math.h" #define number 50 //设置数组的长度 int num10; //十进 ...
- C# 颜色有3种表示方式: 6位16进制、RGB、 颜色关键字
最常用的是6位16进制的代码表示法.如bgcolor=#ff0000;其中#只是表示使用6位16进制的颜色代码声明颜色.代码的头两位即ff表示三原色中的红色,范围当然是16进制的00-ff,中间两位即 ...
- 编码/解码和进制转化工具hURL
编码/解码和进制转化工具hURL 在安全应用中,各种编码方式被广泛应用,如URL编码.HTML编码.BASE64等.而在数据分析时候,各种进制的转化也尤为频繁.为了方便解决这类问题,Kali Li ...
- python数据结构:进制转化探索
*********************************第一部分*************************************************************** ...
随机推荐
- MetaClass
它的作用主要是 指定由谁来创建类,默认是type #python3 class Foo(metaclass=MyType): pass #python2 class Foo(object): __me ...
- git同步遇到报错“fatal: unable to access 'https://github.com/lizhong24/mysite2.git/': Peer reports incompatible or unsupported protocol version.”
git同步遇到报错“fatal: unable to access 'https://github.com/lizhong24/mysite2.git/': Peer reports incompat ...
- DtypeWarning: Columns (1,5,7,16,......) have mixed types. Specify dtype option on import or set low_memory=False.
DtypeWarning: Columns (1,5,7,16,......) have mixed types. Specify dtype option on import or set low_ ...
- Flask系列(十一)整合Flask中的目录结构(sqlalchemy-utils)
一.SQLAlchemy-Utils 由于sqlalchemy中没有提供choice方法,所以借助SQLAlchemy-Utils组件提供的choice方法 import datetime from ...
- 升级wampserver3.0的PHP版本到7.1
windows系统下,目前wampserver的最高版本为3.0.6,其中的PHP最高版本为7.0.10,博主想要安装laravel5.6最新版本,却看到需要PHP版本>=7.1.3,无奈之下, ...
- Spring框架第三篇之基于XML的DI注入
一.注入分类 Bean实例在调用无参构造器创建空值对象后,就要对Bean对象的属性进行初始化.初始化是由容器自动完成的,称为注入.根据注入方式的不同,常用的有两类:设值注入.构造注入.实现特定接口注入 ...
- MongoDB的安全校验
一.MongoDB安全校验的重要性 每个MongoDB实例中的数据库都可以有许多用户.如果没有开启安全校验,限制用户权限,则每个进到数据库的用户都能任意的对数据库数据进行读,写甚至是读写操作.这样的场 ...
- C++实现不能继承的类
实现一个不能继承的类,这在Java等语言中是很好实现的,被final关键字修饰的类不能被继承. C++中没有类似的关键字,须自己实现.一般有如下两种方法: 1.设置构造方法与析构方法为私有 class ...
- Android 常用adb shell 命令
原文地址http://blog.csdn.net/rain_butterfly/article/details/40894807 调试Android程序有时需要adb shell 命令,adb全称An ...
- 编辑器——vscode
1.编辑器个人工作配置 // 将设置放入此文件中以覆盖默认设置 { "editor.tabSize": 2, "workbench.iconTheme": &q ...