bitset用法小结

使用bitset类型需引入头文件 #include< bitset >

它是一种类似数组的结构,它的每一个元素只能是0或1,每个元素仅用1bit空间。

bitset类型在定义时就需要指定所占的空间,即需在<>中表明bitset 的大小(即size)。例如

bitset<n>bit;//即空间占n bit,长度为n;

构造函数

bitset常用构造函数有四种,如下

    bitset<4> bitset1;  //无参构造,长度为4,默认每一位为0bitset<8> bitset2(12);  //长度为8,将12用二进制保存,前面用0补充string s = "100101";bitset<10> bitset3(s);  //长度为10,前面用0补充char s2[] = "10101";bitset<13> bitset4(s2);  //长度为13,前面用0补充cout << bitset1 << endl;  //0000cout << bitset2 << endl;  //00001100cout << bitset3 << endl;  //0000100101cout << bitset4 << endl;  //0000000010101

注意:用字符串构造时,字符串只能包含 ‘0’ 或 ‘1’ ,否则会抛出异常。

在进行有参构造时,若参数的二进制表示比bitset的size小,则在前面用0补充(如上面的栗子);若比bitsize大,参数为整数时取后面部分,参数为字符串时取前面部分(如下面栗子):

bitset<2> bitset1(12);  //12的二进制为1100(长度为4),但bitset1的size=2,只取后面部分,即00string s = "100101";  
bitset<4> bitset2(s);  //s的size=6,而bitset的size=4,只取前面部分,即1001char s2[] = "11101";
bitset<4> bitset3(s2);  //与bitset2同理,只取前面部分,即1110cout << bitset1 << endl;  //00
cout << bitset2 << endl;  //1001
cout << bitset3 << endl;  //1110

基本运算

bitset支持所有位运算

bitset<23>bita(string("11101001"));
bitset<23>bitb(string("11101000"));
cout<<(bita^bitb)<<endl;
//输出00000000000000000000001
bitset<23>bita(string("11101001"));
bitset<23>bitb(string("11101000"));
cout<<(bita|bitb)<<endl;
//输出00000000000000011101001
bitset<23>bita(string("11101001"));
bitset<23>bitb(string("11101000"));
cout<<(bita&bitb)<<endl;
//输出00000000000000011101000
bitset<23>bit(string("11101001"));
cout<<(bit<<5)<<endl;
//输出00000000001110100100000
bitset<23>bit(string("11101001"));
cout<<(bit>>5)<<endl;
//输出00000000000000000000111

常用函数

//对于一个叫做bit的bitset:
bit.size()      //返回大小(位数)
bit.count()     //返回1的个数
bit.any()       //返回是否有1
bit.none()      //返回是否没有1
bit.set()       //全都变成1
bit.set(p)      //将第p + 1位变成1(bitset是从第0位开始的!)
bit.set(p, x)   //将第p + 1位变成x
bit.reset()     //全都变成0
bit.reset(p)    //将第p + 1位变成0
bit.flip()      //全都取反
bit.flip(p)     //将第p + 1位取反
bit.to_ulong()  //返回它转换为unsigned long的结果,如果超出范围则报错
bit.to_ullong() //返回它转换为unsigned long long的结果,如果超出范围则报错
bit.to_string() //返回它转换为string的结果

例题:第九届蓝桥杯C/C++B组省赛第二题解析

第二题:明码

汉字的字形存在于字库中,即便在今天,16点阵的字库也仍然使用广泛。

16点阵的字库把每个汉字看成是16x16个像素信息。并把这些信息记录在字节中。

一个字节可以存储8位信息,用32个字节就可以存一个汉字的字形了。

把每个字节转为2进制表示,1表示墨迹,0表示底色。每行2个字节,

一共16行,布局是:

第1字节,第2字节

第3字节,第4字节

第31字节, 第32字节

这道题目是给你一段多个汉字组成的信息,每个汉字用32个字节表示,这里给出了字节作为有符号整数的值。

题目的要求隐藏在这些信息中。你的任务是复原这些汉字的字形,从中看出题目的要求,并根据要求填写答案。

这段信息是(一共10个汉字):

 4 0 4 0 4 0 4 32 -1 -16 4 32 4 32 4 32 4 32 4 32 8 32 8 32 16 34 16 34 32 30 -64 016 64 16 64 34 68 127 126 66 -124 67 4 66 4 66 -124 126 100 66 36 66 4 66 4 66 4 126 4 66 40 0 164 0 4 0 4 0 4 32 -1 -16 4 32 4 32 4 32 4 32 4 32 8 32 8 32 16 34 16 34 32 30 -64 00 -128 64 -128 48 -128 17 8 1 -4 2 8 8 80 16 64 32 64 -32 64 32 -96 32 -96 33 16 34 8 36 14 40 44 0 3 0 1 0 0 4 -1 -2 4 0 4 16 7 -8 4 16 4 16 4 16 8 16 8 16 16 16 32 -96 64 6416 64 20 72 62 -4 73 32 5 16 1 0 63 -8 1 0 -1 -2 0 64 0 80 63 -8 8 64 4 64 1 64 0 -1280 16 63 -8 1 0 1 0 1 0 1 4 -1 -2 1 0 1 0 1 0 1 0 1 0 1 0 1 0 5 0 2 02 0 2 0 7 -16 8 32 24 64 37 -128 2 -128 12 -128 113 -4 2 8 12 16 18 32 33 -64 1 0 14 0 112 01 0 1 0 1 0 9 32 9 16 17 12 17 4 33 16 65 16 1 32 1 64 0 -128 1 0 2 0 12 0 112 00 0 0 0 7 -16 24 24 48 12 56 12 0 56 0 -32 0 -64 0 -128 0 0 0 0 1 -128 3 -64 1 -128 0 0

###注意:需要提交的是一个整数,不要填写任何多余内容。

答案:387420489

解题思路:

十进制转化为二进制,10个汉字是:九的九次方等于多少?###

#include <bits/stdc++.h>
using namespace std;
int main()
{int n,m;string str1,str2;while(cin>>n>>m){bitset<8> b(n);str1 = b.to_string();//string to_string ():返回对应的字符串.int len1 = (int)str1.length();for(int i=0;i<len1;i++){if(str1[i] == '0')printf(" ");else printf("*");}bitset<8> c(m);str2 = c.to_string();int len2 = (int)str2.length();for(int i=0;i<len2;i++){if(str2[i] == '0')printf(" ");else printf("*");}printf("\n");}return 0;
}

STL bitset用法小结(详细)附蓝桥杯题:明码相关推荐

  1. C++ 字符串流stringstream(附蓝桥杯2018年第九届真题缩位求和题解)

    一.stringstream介绍 stringstream是 C++ 提供的一个字符串流(stream),,必须包含其头文件: #include <sstream> < sstrea ...

  2. 蓝桥杯题库 算法提高非vip部分(C++、Java)代码实现(251-280)

    文章目录 ADV-251 Petri Net Simulation cpp: java: ADV-252 Navigation cpp: ADV-256 The Sky is the Limit cp ...

  3. java dfs算法蓝桥杯题_【蓝桥杯省赛JavaB组真题详解】四平方和(2016)_疼疼蛇的博客-CSDN博客...

    原文作者:疼疼蛇 原文标题:[蓝桥杯省赛JavaB组真题详解]四平方和(2016) 发布时间:2021-02-26 15:00:01 题目描述 四平方和 四平方和定理,又称为拉格朗日定理: 每个正整数 ...

  4. STL bitset用法总结

    c++ bitset类用法:http://blog.csdn.net/qll125596718/article/details/6901935 C++ 参考:http://www.cplusplus. ...

  5. printf()的冷门用法+格子中输出--蓝桥杯

    ##首先先看题目 格子中输出 StringInGrid函数会在一个指定大小的格子中打印指定的字符串. 要求字符串在水平.垂直两个方向上都居中. 如果字符串太长,就截断. 如果不能恰好居中,可以稍稍偏左 ...

  6. 蓝桥杯题_ALGO11_瓷砖铺放

    问题描述 有一长度为N(1<=N<=10)的地板,给定两种不同瓷砖:一种长度为1,另一种长度为2,数目不限.要将这个长度为N的地板铺满,一共有多少种不同的铺法? 例如,长度为4的地面一共有 ...

  7. 2013年蓝桥杯题集C本科B

    1.题目标题: 高斯日记 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们知道,那个整数就是日期,它表示那一天是 ...

  8. 蓝桥杯题库 BASIC-3 字母图形

    #include <iostream> #include <cmath> using namespace std; int main() {int n, m;cin >& ...

  9. 蓝桥杯 题1557 聪明的美食家 C++

    动态规划 如果有人认为吃东西只需要嘴巴,那就错了. 都知道舌头有这么一个特性,"由简入奢易,由奢如简难"(据好事者考究,此规律也适合许多其他情况).具体而言,如果是甜食,当你吃的食 ...

最新文章

  1. javascript中 (function(){})();如何理解?
  2. java多线程爬虫_Java 多线程爬虫及分布式爬虫架构
  3. html中radio,checkbox值的获取、赋值、注册事件
  4. Linus 在圣诞节想提前放假做了这些解释,哈哈哈
  5. python爬虫动态解析js_Python爬虫实战入门五:获取JS动态内容—爬取今日头条
  6. 如何学习HTML语言
  7. 页面切换主题风格,利用本地缓存
  8. idea 注释模板_常用的模板函数
  9. 还在迷茫于前端如何入门和进阶?万字指南让你不再迷茫!
  10. DevOps使用教程 华为云(6)文档报告 项目进度 会议记录 迭代评审
  11. 【BZOJ4566】[Haoi2016]找相同字符 后缀数组+单调栈
  12. 高斯光束matlab 仿真,高斯光束的matlab仿真
  13. 工具分享 | LiqunKit 综合漏洞利用工具(下载地址在文末)
  14. 2019上半年软件设计师考试大纲
  15. 阿里巴巴矢量图库的具体使用用法可以变色改变大小
  16. 西门子PLC 和v90 伺服变频器G120通讯
  17. 睡不醒别赖基因,UC伯克利最新研究:锻炼和早餐是关键
  18. 上海航芯|物联网安全芯片ACL16简介
  19. 关于ImportError: No module named ‘tensorflow‘报错的解决
  20. 2022年数学建模比赛时间大全及报名费

热门文章

  1. ABAP初学者如何系统地学习ABAP编程?
  2. mac文字识别 好用的免费软件 翻译软件 搜索软件 预览软件 腾讯软件 腾讯柠檬精选 腾讯柠檬 懒人必备
  3. CVE-2018-9175 DEDECMS后台getshell
  4. 用ASP.NET读取QQ相册
  5. 运用RUP4+1视图方法进行软件架构设计
  6. MapleSim助力长臂挖掘机建模问题解决
  7. 学习JAVA Web 第八天
  8. office 2010 ppt幻灯片自动播放
  9. 倒手一套房,还贷款后落地400万!我打算离开上海了~
  10. 【调剂】3.16计算机考研其余调剂信息