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用法的更多相关文章

  1. 玩家属性同步优化-脏数据标记(位运算、数组、stl之bitset)

    把大神的帖子中一部分摘抄出来,结合自己写的位运算代码和循环代码(数组遍历)进行性能测试分析并给出结果. 摘自: https://www.gameres.com/827195.html 本文适用于所有脏 ...

  2. java------常见的进制、不同进制在代码中的表现形式、进制之间的转化、分辨率、三原色、计算机的存储规则

    常见的进制: 常见的进制:二进制.八进制.十进制.十六进制 不同进制在代码中的表现形式: 进制之间的转化: 二进制转十进制: 普通方法: 快捷方法: 八进制转十进制: 十六进制转十进制: 总结: 分辨 ...

  3. 汇编:1位16进制数到ASCII码转换

    ;============================ ;1位16进制数到ASCII码转换 ; { X+30H (0≤X≤9) ;Y= { ; { X+37H (0AH≤X≤0FH) DATAS ...

  4. 《N诺机试指南》(五)进制转化

    进制转化类题目类型: 代码详解及注释解答:  //进制转化问题 #include <bits/stdc++.h> using namespace std; int main(){ // 1 ...

  5. 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 ...

  6. 【风马一族_C】进制转化

    #include "stdio.h" #include "Math.h" #define number 50 //设置数组的长度 int num10; //十进 ...

  7. C# 颜色有3种表示方式: 6位16进制、RGB、 颜色关键字

    最常用的是6位16进制的代码表示法.如bgcolor=#ff0000;其中#只是表示使用6位16进制的颜色代码声明颜色.代码的头两位即ff表示三原色中的红色,范围当然是16进制的00-ff,中间两位即 ...

  8. 编码/解码和进制转化工具hURL

    编码/解码和进制转化工具hURL   在安全应用中,各种编码方式被广泛应用,如URL编码.HTML编码.BASE64等.而在数据分析时候,各种进制的转化也尤为频繁.为了方便解决这类问题,Kali Li ...

  9. python数据结构:进制转化探索

    *********************************第一部分*************************************************************** ...

随机推荐

  1. python(五)常用模块学习

    版权声明:本文为原创文章,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明. https://blog.csdn.net/fgf00/article/details/52357 ...

  2. Vi 的常用命令

    1. vi 的三种工作模式 命令模式 打开文件首先进入命令模式, 是使用 vi 的入口; 通过命令对文件进行常规的编辑操作, 例如: 定位,翻页,复制,粘贴,删除等; 末行模式 执行保存,退出等操作, ...

  3. SSO详解(转)

    转自:http://www.cnblogs.com/EzrealLiu/p/5559255.html 1. 摘要 SSO这一概念由来已久,网络上对应不同场景的成熟SSO解决方案比比皆是,从简单到复杂, ...

  4. getApplicationContext()、Activity.this、 getBaseContext区别

    getApplicationContext()返回应用的上下文,生命周期是整个应用,应用退出它才被摧毁 Activity.this 返回当前activity的上下文,属于activity ,activ ...

  5. Art of Android Develop. Activity的生命周期和启动模式。

    1.  onCreate() ,  onRestart(),  onStart(),  onResume(),  onPause(),  onStop(),  onDestroy() 2.

  6. HBase在HDFS上的目录树

    众所周知,HBase 是天生就是架设在 HDFS 上,在这个分布式文件系统中,HBase 是怎么去构建自己的目录树的呢? 这里只介绍系统级别的目录树: 一.0.94-cdh4.2.1版本 系统级别的一 ...

  7. python中的内置函数总结

    官方文档 一. 数学函数 #abs() 绝对值 #bin() 二进制 0b #oct() 八进制 0o #hex() 十六进制 0x #complex 复数 x=1-2j print(x) print ...

  8. android 显示internet 图片

    try { HttpGet httpRequest = new HttpGet(edtUrl.getText() .toString()); HttpClient httpclient = new D ...

  9. pycharm激活(转)

    1.注册码激活Activation code http://idea.lanyus.com/ 2.服务器激活License server(推荐) 或者http://182.254.242.193:10 ...

  10. 360急速浏览器JS的调试

    1.代码中添加debugger关键字 2.360急速浏览器中选择工具--开发人员选项,如下图所示,在sources面板中可以看到正在运行的JS代码,F10可以单步函数执行,在鼠标放在变量上可以跟踪变量 ...