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. BS一机双屏的解决方式

    一.WebSocket通讯 WebSocket protocol 是HTML5一种新的协议.它实现了浏览器与server全双工通信. 为保证socket不间断.使用下面类库进行socket通讯. ht ...

  2. ssm框架集成Quartz定时器

    第一步:添加依赖 <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>qu ...

  3. img 标签注意 默认img标签,有一个1px的边框 img{ border: 0; }

    默认img标签,有一个1px的边框 img{ border: 0; }

  4. Jenkins节点配置页面,启动方法没有"Launch agent via Java Web Start"解决方法?

    Jenkins的配置从节点中默认没有Launch agent via JavaWeb Start,解决办法: 步骤: 1:打开"系统管理"——"Configure Glo ...

  5. 打开关闭oracle自动表分析

      oracle 表的统计信息,跟他的执行计划很有关联 执行计划的正常是否,跟SQL的执行速度很有关系 首先讲解一下如何查看一个数据库的是否开启自动统计分析 1.查看参数:STATISTICS_LEV ...

  6. 配置支持Basler的API函数的开发环境

    第一步:文件说明 使用默认路径安装Basler pylon x86 4.2.1.4845.exe 以后生产的文件如下: 文件说明: apps为用于配置ip和调试相机的软件 bin为驱动程序 CLPro ...

  7. A simple windows programm in c

    A simple windows programm in c        The following programm is a minimal windows program. It opens ...

  8. 聚类之k-means

    1.介绍 k-means算法以k为参数(所期望的簇的个数),把n个对象分成k个簇(单层划分),用质心(数据点的平均值)定义簇的原型.使得簇内具有较高的相似度,而簇间的相似度较低. 通过聚类,我们能够发 ...

  9. [C语言]删除用户自定义后缀名的所有文件

    环境:win7 IDE:DEV-C++ 编译器:GCC 编译结果:Success 运行结果:Success 使用说明: 1.输入需要查询的目录,比如e: 2.输入需要删除的后缀名:比如:txt 注意: ...

  10. ruby lib文件夹作用

    require 'lib/test_module' #lib/test_module.rb module TestModule end