说明: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. silverlight 子UserControl获取父UserControl

    文章转载自: [Silverlight] Silverlight中访问父对象 http://bbs.blueidea.com/thread-2964806-1-1.html 当前一个需求是一个User ...

  2. jquery cloudzoom 3.0,magiczoom 放大镜插件 破解 移除版权信息

    jquery Cloud Zoom一款放大镜插件.但是无奈 官方下载的始终有版权信息,因此想到如下方法去掉版权信息,测试可行! 官方网址:http://www.starplugins.com/clou ...

  3. oracle 备份数据

    exp AC_SSO/AC_SSO@HB file=d:\wamp\Golden3C_AuthenticationCenter.dmp owner=AC_SSO full=y用户名/密码@服务 exp ...

  4. tar 报错gzip: stdin: not in gzip format(转载)

    转自:http://blog.sina.com.cn/s/blog_6f2274fb0100z026.html 今天在linux下 用tar -zxf xxx.tar.bz2 然后就报这个错. gzi ...

  5. Linux 常用命令一 ls

    一.ls命令 用于查看目录下的文件信息. ls 当前目录下都有哪些文件: wang@wang:~$ ls examples.desktop workpalce 模板 图片 下载 桌面 tools 公共 ...

  6. qr.update导致的java.lang.NullPointerException空指针异常

    debug以后代码走到了qr.update这一步,再向下走一步就会报错了,内容是java.lang.NullPointerException 最后再三检查发现是SQL语句写错了!,我写的是插入语句是I ...

  7. 洛谷 P3368 【模板】树状数组 2(区间修改点查询)

    题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的值 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. ...

  8. docker速记

    1.docker:一个轻量级的虚拟机.是一个容器 2.Linux系统包括—RedHat(商业版).Centos.Ubuntu 3.docker比作码头的集装箱,image镜像就是基石,images类似 ...

  9. java 学习书籍

    <Effective java> <深入理解java虚拟机> <Java并发编程实践> <Java Performance> <java解惑> ...

  10. Fools and Roads CodeForces - 191C

    Fools and Roads CodeForces - 191C 题意:给出一棵n个节点的树,还有树上的k条简单路径(用路径的两个端点u和v表示),对于树上每一条边,求出其被多少条简单路径经过. 方 ...