说明:bitset 就像 vector 一样,是 C++ 的一个类模板库,用来对一个数的二进制位进行管理、判断等操作,使用时需要包含头文件 #include<bitset>。

1.声明及定义

格式:bitset<N> var(M)

其中 var 为 bitset 的类对象,N 表示该对象所占的位数,这里的位数指的是二进制。M 指的是 var 的初始值,可以是十六进制也可以是十进制,甚至还可以是 0-1 字符串。

     string str("");
bitset<10> a(10);
//将a初始化为000001010
bitset<10> e(0xff);
//将e的后8位初始化为1
bitset<10> f(str);
//将f的后5位初始化为1
bitset<10> d;
//无参数时每位都初始化为0

2.位操作成员函数

1.text(pos)

功能:测试 pos 为是否为1,是返回 1,不是返回 0。

2.any()

功能:测试所有位是否为 0 ,是返回0,不是返回1。

3.none()

功能:测试是否所有位为 0 ,是返回1,不是返回0.

4.count()

功能:统计位为 1 的个数并返回。

5.size()

功能:求取对象的大小(这里指的是位数)并返回。

6.flip(pos)

功能:将 pos 为翻转,即 0-1 变换,当无参时,则翻转所有位。

7.set(pos)

功能:将 pos 位置 1,当无参时,将所有位置 1 。

8.reset(pos)

功能:将 pos 为置 0 ,当无参时则将所有位置 0 。

示例:

     bitset<10> a(10);
cout<<a<<endl;
cout<<a.test(1)<<endl;
cout<<a.any()<<endl;
cout<<a.none()<<endl;
cout<<a.count()<<endl;
cout<<a.size()<<endl;
a.set();
cout<<a<<endl;
a.reset();
cout<<a<<endl;
a.flip();
cout<<a<<endl;

程序运行结果:

 0000001010
1
1
0
2
10
1111111111
0000000000
1111111111

值得注意的是:对某个对象的位可以像数组那样进行下标访问,并且还可以修改其 0-1 标志,如下修改对象的第 6 位并分别打印出各位:

     bitset<10> a(10);
a[5] = 1;
for(int i = 0;i<10;i++)
cout<<a[i]<<"";

3.转换成员函数

bitset 对一个数进行了二进制位的操作,即将某个数转换成了二进制形式,并对二进制的某些位进行了操作(还有 0-1 字符串),那么如果我们需要用到修改了某个二进制位的数(0-1字符串)时,则需要通过转换函数来实现。

1.to_ulong()

功能:将对象以 unsigned long 类型返回,若对象经过了位操作函数的修改,则返回修改后的值。

2.to_string()

功能:将对象以 0-1 字符串的形式返回,若对象经过了修改,则返回修改后的值。如下代码输出为:10    0000001010 。

     bitset<10> a(10);
int data = a.to_ulong();
string str = a.to_string();
cout<<data<<""<<str;

注意:bitset 对象只接受整型数据,如果初始化一个带有小数的数时,将自动截断,取整数部分进行操作。

(C/C++学习)17.bitset(位操作)的更多相关文章

  1. C++的bitset(位操作使用),转载

    有些程序要处理二进制位的有序集,每个位可能包含的是0(关)或1(开)的值.位是用来保存一组项或条件的yes/no信息(有时也称标志)的简洁方法.标准库提供了bitset类使得处理位集合更容易一些.要使 ...

  2. GO学习-(17) Go语言基础之反射

    Go语言基础之反射 本文介绍了Go语言反射的意义和基本使用. 变量的内在机制 Go语言中的变量是分为两部分的: 类型信息:预先定义好的元信息. 值信息:程序运行过程中可动态变化的. 反射介绍 反射是指 ...

  3. iOS 学习 - 17.Socket

    Socket 是应用层与 TCP / IP 协议通信的中间软件抽象层,它是一组接口   TCP:面向连接.传输可靠(保证数据正确性,保证数据顺序).用于传输大量数据(流模式).速度慢,建立连接需要开销 ...

  4. 【Java EE 学习 17 下】【数据库导出到Excel】【多条件查询方法】

    一.导出到Excel 1.使用DatabaseMetaData分析数据库的数据结构和相关信息. (1)测试得到所有数据库名: private static DataSource ds=DataSour ...

  5. 【Java EE 学习 17 上】【dbutils和回调函数】

    一.dbutils的核心就是回调函数,可以说如果没有回调函数的思想,dbutils是不可能被开发出来的. 对于dbutils中的QuryRunner类,向该类的query方法提供不同的参数,可以得到不 ...

  6. ndk学习17: jni之Java调用C&C++

    一.Hello World 1. 定义函数原型 native关键字定义的函数即为jni函数 2.生成头文件 切换到src目录执行: (这个过程可以写脚本自动完成,比如自动拷贝到jni目录) javah ...

  7. iOS学习17之OC内存管理

    1.内存管理的方式 1> iOS应用程序出现Crash(闪退),90%的原因是因为内存问题. 2> 内存问题 野指针异常:访问没有所有权的内存,如果想要安全的访问,必须确保空间还在 内存泄 ...

  8. C++学习17派生类的构造函数

    基类的构造函数不能被继承,在声明派生类时,对继承过来的成员变量的初始化工作也要由派生类的构造函数来完成.所以在设计派生类的构造函数时,不仅要考虑派生类新增的成员变量,还要考虑基类的成员变量,要让它们都 ...

  9. 【Shell脚本学习17】Shell case esac语句

    case ... esac 与其他语言中的 switch ... case 语句类似,是一种多分枝选择结构. case 语句匹配一个值或一个模式,如果匹配成功,执行相匹配的命令.case语句格式如下: ...

随机推荐

  1. 强类型的HTML模板方法与直接显示模型

    模型: public class Article { [Display(Name="文章")] public string ArticleID { get; set; } [Dis ...

  2. Bootstrap中的各种下拉菜单

    @*基本下拉菜单与按钮下拉菜单的样式完全一致.不过,基本的下拉菜单使用<div class="dropdown">包裹,所有要换行.而按钮式下拉菜单<div cl ...

  3. JNI编程(一) —— 编写一个最简单的JNI程序(转载)

    转自:http://chnic.iteye.com/blog/198745 忙了好一段时间,总算得了几天的空闲.貌似很久没更新blog了,实在罪过.其实之前一直想把JNI的相关东西整理一下的,就从今天 ...

  4. HDU-ACM“菜鸟先飞”冬训系列赛——第9场

    Problem A 题意 一对兔子每月生一对兔子,兔子在\(m\)月后成熟,问\(d\)月后有多少兔子 分析 可以发现,第i月的兔子数量取决于第i-1月与i-m月,故 \(a[i]=a[i-1]+a[ ...

  5. 【插件开发】—— 10 JFace开发详解

    前文回顾: 1 插件学习篇 2 简单的建立插件工程以及模型文件分析 3 利用扩展点,开发透视图 4 SWT编程须知 5 SWT简单控件的使用与布局搭配 6 SWT复杂空间与布局搭配 7 SWT布局详解 ...

  6. Spring Boot之配置文件值注入(@ConfigurationProperties)

    前言:Spring Boot配置文件值的注入有两种方式,分别是 @ConfigurationProperties @Value 这里我们使用第一种 首先我们创建一个application.yml文件, ...

  7. Luogu P1083 借教室【二分答案/差分】By cellur925

    题目描述 Description 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要 向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海 ...

  8. 从零开始通过idea插件将一个spring boot项目部署到docker容器里运行

    实操:将一个spring boot项目部署到docker容器里运行 实验需要的环境: 腾讯云+Ubuntu 16.04 x64+idea+插件docker integration+daocloud 第 ...

  9. PowerDesigner在PDM转换为sql脚本时报错Generation aborted due to errors detected during the verification of the mod

    在设计概念数据模型(CDM)之后,转换为物理数据模型(PDM),之后转换为sql脚本时报错Generation aborted due to errors detected during the ve ...

  10. Robot Framework问题汇总...不断更新中

    在实际使用Robot Framework工具过程中,难免会遇到一些问题, 我们将会一一记录下来,以便后来者碰到类似的问题能够快速解决! 安装类问题: ========================= ...