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. Java中“==和equals”的区别

    (1)“==” 是判断地址的: (2)至于equals,String类型重写了 equals()方法,判断内容是否相等,因此 equals 是相等的:

  2. python发送GET或POST请求以便干一些趣事

    适合级别:入门,中级 关键字   :python, http, GET, POST, 安全, 模拟, 浏览器, 验证码,图片识别, google 1 此文不是关于黑客或安全话题的! 2 使用脚本程序发 ...

  3. Notepad++ 更换主题+字体

    Notepad++ 更换主题 https://blog.csdn.net/haluoluo211/article/details/51922666 延伸: 挑选主题 https://blog.csdn ...

  4. Linux chmod命令

    chmod用于管理文件或目录的权限,文件或目录权限的控制分别以读取(r).写入(w).执行(x)3种 可读可写可执行,抽象的用二进制来表示 1 代表拥有该权限,0 代表没有该权限,这样我们就可以看到 ...

  5. Java集合—List(转载)

    本篇文章将集中介绍了List集合相比Collection接口增加的一些重要功能以及List集合的两个重要子类ArrayList及LinkedList. 一.List集合 List作为Collectio ...

  6. PAT 1120 Friend Numbers[简单]

    1120 Friend Numbers (20 分) Two integers are called "friend numbers" if they share the same ...

  7. django 用户登陆的实现 构造类的方式

    在views下增加LoginView类 from django.views.generic.base import View class LoginView(View): def get(self,r ...

  8. undefined reference to `__sync_bool_compare_and_swap_4

    然后开始glibc的编译工作. 你必须设定march这个参数才行,要不然会出现“undefined reference to `__sync_bool_compare_and_swap_4′.”这个错 ...

  9. 3.MySQL必知必会之检索数据-SELECT语句

    本章将介绍如何使用SELECT语句从表中检索一个或多个数据列. 1.SELECT语句 SQL语句是由简单的英语单词构成的.这些单词称为关键字,每个SQL语句都是由一个或多个关键字构成的.大概,最经常使 ...

  10. idea操作数据库

    1.View-->>Tool Windows-->>Database. 2.点击“+”号-->>选择Data Source-->>选择需要连接的数据库类 ...