bitest(位集合)------c++程序设计原理与实践(进阶篇)
标准库模板类bitset是在<bitset>中定义的,它用于描述和处理二进制位集合。每个bitset的大小是固定的,在创建时指定:
- bitset<4> flags;
- bitset<128> dword_bits;
- bitset<12345> lots;
默认情况下,bitset被初始化为全0,但通常我们都会给它一个初始值,可以是一个无符号的整数或者”0“和”1“组成的字符串。例如:
- bitset<4> flags=0xb;
- bitset<128>dword_bits{string{"1010101010101010"}};
- bitset<12345>lots;
这两段代码中,lots被初始化为全0,dword_bits的钱112为被初始化为全0,后16位由程序显式指定。如果你给出的初始化字符串中包含0和1之外的符号,bitset会抛出一个std::invalid_argument异常:
- string s;
- cin>>s;
- bitset<12345> my_bits(s); //可能抛出std::invalid_argument
常用的位运算符都可用于bitset。例如,假定b1、b2和b3都是bitset:
- b1=b2&b3; //与
- b1=b2|b3; //或
- b1=b2^b3; //异或
- b1=~b2; //补
- b1=b2<<2; //左移
- b1=b2>>3; //右移
大致来说,对于位运算而言,bitset就像unsigned int 一样,只不过其大小任意,由用户指定。你能对unsigned int 做什么(除了算术运算之外),就能对bitset做什么。特别地,bitset对I/O也很有用:
- cin>>b; //从输入读取一个bitset
- cout<<bitset<8>('c'); //输出字符'c'的位模式
当读入bitset时,输入流会寻找0和1,例如,如果输入下面的内容:
- 10121
输入流会读入101,21会被留下。
对于字节和字,bitset中的位是由右至左编号的(从最低有效位到最高有效位)。这样,第7位的值就是27;
7: | 6: | 5: | 4: | 3: | 2: | 1: | 0: |
1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 |
对于bitset而言,编号顺序不仅仅是遵循惯例的问题,还起到二进制位的索引下标的作用。例如:
- #include <iostream>
- #include<bitset>
- using namespace std;
- int main(){
- int n;
- const int j = n;
- constexpr int max = 10;
- for (bitset<max> b; cin >> b;) { cout << b << '\n';
- for (int i = 0; i < max; ++i)cout << b[i];
- cout << '\n';
- }
- }
c++程序设计原理与实践(进阶篇)
bitest(位集合)------c++程序设计原理与实践(进阶篇)的更多相关文章
- 有符号数和无符号数------c++程序设计原理与实践(进阶篇)
有符号数与无符号数的程序设计原则: 当需要表示数值时,使用有符号数(如 int). 当需要表示位集合时,使用无符号数(如unsigned int). 有符号数和无符号数混合运算有可能会带来灾难性的后果 ...
- 实现求解线性方程(矩阵、高斯消去法)------c++程序设计原理与实践(进阶篇)
步骤: 其中A是一个n*n的系数方阵 向量x和b分别是未知数和常量向量: 这个系统可能有0个.1个或者无穷多个解,这取决于系数矩阵A和向量b.求解线性系统的方法有很多,这里使用一种经典的方法——高斯消 ...
- 函数形参为基类数组,实参为继承类数组,下存在的问题------c++程序设计原理与实践(进阶篇)
示例: #include<iostream> using namespace std; class A { public: int a; int b; A(int aa=1, int bb ...
- 函数返回值string与返回值bool区别------c++程序设计原理与实践(进阶篇)
为什么find_from_addr()和find_subject()如此不同?比如,find_from_addr()返回bool值,而find_subject()返回string.原因在于我们想说明: ...
- (c++11)随机数------c++程序设计原理与实践(进阶篇)
随机数既是一个实用工具,也是一个数学问题,它高度复杂,这与它在现实世界中的重要性是相匹配的.在此我们只讨论随机数哦最基本的内容,这些内容可用于简单的测试和仿真.在<random>中,标准库 ...
- 数值限制------c++程序设计原理与实践(进阶篇)
每种c++的实现都在<limits>.<climits>.<limits.h>和<float.h>中指明了内置类型的属性,因此程序员可以利用这些属性来检 ...
- 编码原则实例------c++程序设计原理与实践(进阶篇)
编码原则: 一般原则 预处理原则 命名和布局原则 类原则 函数和表达式原则 硬实时原则 关键系统原则 (硬实时原则.关键系统原则仅用于硬实时和关键系统程序设计) (严格原则都用一个大写字母R及其编号标 ...
- gets()scanf()有害------c++程序设计原理与实践(进阶篇)
最简单的读取字符串的方式是使用gets(),例如: char a[12]; gets(a); 但gets()和scanf()是有害的,曾经有大约1/4的成功黑客攻击是由于gets()和它的近亲scan ...
- 宏(使用注意事项、主要用途)------c++程序设计原理与实践(进阶篇)
使用宏的时候一定要小心:在c中没有真正有效的方法来避免使用宏,但宏带有严重的副作用,因为宏不遵守通常的c(或c++)作用域和类型规则——它只是一种文本替换. 宏的使用注意事项: 所以宏名全部大写. ...
随机推荐
- 在液晶屏里显示浮点数的方法 (sprintf 的妙用)
思路:使用 sprintf 函数将浮点型数据转为指定格式的字符串 #include <stdio.h> #include<string.h> int main() { unsi ...
- PHP 简单实现webSocket
费话少说,用源代码说话 1)客户端实现 1 <html> 2 <head> 3 <meta charset="UTF-8"> 4 <tit ...
- chrome启动参数设置
chrome禁止本地浏览时加载本地其他文件,可以采用添加启动参数的方式来支持 添加参数为 --allow-file-access-from-files 或者 --disable-web-securi ...
- Unable to correct problems, you have held broken package
其实这篇接着上文(一),主要是解决samba安装的问题,中间又是一路曲折.不过这个问题也算是比较典型,有必要记录一下. #apt-get install smb* 安装失败.其实顺利的话,直接一条这样 ...
- Spring Cloud Zuul 1(API 网关服务)
API网关是一个更为智能的应用服务器,它的存在就像是整个微服架构系统的门面一样,所有的外部客户端访问都需要经过它来进行调度和过滤. 它实现的功能包括:请求路由.负载均衡.校验过滤等功能. Spring ...
- 进程间通信___命名管道(FIFO)
命名管道(FIFO) 基本概念 命名管道和一般的管道基本相同,但也有一些显著的不同: 命名管道是在文件系统中作为一个特殊的设备文件而存在的. 不同祖先的进程之间可以通过管道共享数据. 当共享管道的进程 ...
- docker 制作本地镜像
docker commit 55ddf8d62688 py_wb # 容器ID, 容器名称tag py_wb IP地址:5000/my-web:20180511 # 远程registory地址 我的镜 ...
- 08-Location总结图解
URI解析 首先要判断有没有精准匹配,能不能精准匹配.计算机里面没有什么这种差不多这种东西.跟人聊天才说差不多,最近过得怎么样啊,还行吧,差不多吧,这个不多是多还是不多啊. 预定义库->Gen ...
- 基于size的优化
----------------------siwuxie095 基于 size 的优化 在 union( p , q ...
- Mr_matcher的细节3
主要是订阅了playbag发布的scan话题和odom话题 其类型分别为 //cache the static tf from base to laser getBaseToLaserTf(scan_ ...