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. 关于HashSet在 java7 与 java8的不同

    作者:RednaxelaFX链接:https://www.zhihu.com/question/28414001/answer/40733996来源:知乎著作权归作者所有.商业转载请联系作者获得授权, ...

  2. 借助 Django 的 smart_str 和 smart_unicode 进行编码转换(转)

    原文:http://www.dirk.sh/diary/using-django-smart_str-smart_unicode/ Django 为字符编码的转换提供了非常简洁的方法: 1.djang ...

  3. Keras + Ubuntu环境搭建

    安装Theano (环境参数:Ubuntu 16.04.2  Python 2.7) 安装 numpy 和 scipy 1.sudo apt-get install python-numpy pyth ...

  4. 日志输出:控制台和log文件输出日志

    self_log.py 中 import os import logging import time # 如果日志文件夹不存在,则创建 log_dir = "log" # 日志存放 ...

  5. 禁止Centos系统You have new mail in /var/spool/mail/root提示

    禁止Centos系统You have new mail in /var/spool/mail/root提示 https://blog.csdn.net/oyym_mv/article/details/ ...

  6. 【云安全与同态加密_调研分析(3)】国内云安全组织及标准——By Me

    ◆3. 国内云安全组织及标准◆ ◆云安全标准机构(主要的)◆ ◆标准机构介绍◆ ◆相关标准制定◆ ◆建立的相关模型参考◆ ◆备注(其他参考信息)◆ ★中国通信标准化协会(CCSA) ●组织简介:200 ...

  7. Oracle中查看建立索引和使用索引的注意点

    一.查看和建立索引 select * from user_indexes where table_name = 'student' create index i_student_num on stud ...

  8. web.xml中的元素

    error-page元素包含三个子元素error-code,exception-type和location.将错误代码(Error Code)或异常(Exception)的种类对应到web应用资源路径 ...

  9. WSDL(WebService描述语言)文件介绍

    一.WSDL 1.WSDL 文档的组成部分 <portType>:web service 执行的操作 <message>:web service 使用的消息 <types ...

  10. 记一次服务器迁移SVN客户端更换IP

    服务器迁移,SVN服务端IP由原10.58.8.231更换至10.58.1.230   TortoiseSVN更换ip地址操作如下: 打开svn项目的根目录,右键如图操作: 修改ip地址为10.58. ...