(C/C++学习)17.bitset(位操作)
说明: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(位操作)的更多相关文章
- C++的bitset(位操作使用),转载
有些程序要处理二进制位的有序集,每个位可能包含的是0(关)或1(开)的值.位是用来保存一组项或条件的yes/no信息(有时也称标志)的简洁方法.标准库提供了bitset类使得处理位集合更容易一些.要使 ...
- GO学习-(17) Go语言基础之反射
Go语言基础之反射 本文介绍了Go语言反射的意义和基本使用. 变量的内在机制 Go语言中的变量是分为两部分的: 类型信息:预先定义好的元信息. 值信息:程序运行过程中可动态变化的. 反射介绍 反射是指 ...
- iOS 学习 - 17.Socket
Socket 是应用层与 TCP / IP 协议通信的中间软件抽象层,它是一组接口 TCP:面向连接.传输可靠(保证数据正确性,保证数据顺序).用于传输大量数据(流模式).速度慢,建立连接需要开销 ...
- 【Java EE 学习 17 下】【数据库导出到Excel】【多条件查询方法】
一.导出到Excel 1.使用DatabaseMetaData分析数据库的数据结构和相关信息. (1)测试得到所有数据库名: private static DataSource ds=DataSour ...
- 【Java EE 学习 17 上】【dbutils和回调函数】
一.dbutils的核心就是回调函数,可以说如果没有回调函数的思想,dbutils是不可能被开发出来的. 对于dbutils中的QuryRunner类,向该类的query方法提供不同的参数,可以得到不 ...
- ndk学习17: jni之Java调用C&C++
一.Hello World 1. 定义函数原型 native关键字定义的函数即为jni函数 2.生成头文件 切换到src目录执行: (这个过程可以写脚本自动完成,比如自动拷贝到jni目录) javah ...
- iOS学习17之OC内存管理
1.内存管理的方式 1> iOS应用程序出现Crash(闪退),90%的原因是因为内存问题. 2> 内存问题 野指针异常:访问没有所有权的内存,如果想要安全的访问,必须确保空间还在 内存泄 ...
- C++学习17派生类的构造函数
基类的构造函数不能被继承,在声明派生类时,对继承过来的成员变量的初始化工作也要由派生类的构造函数来完成.所以在设计派生类的构造函数时,不仅要考虑派生类新增的成员变量,还要考虑基类的成员变量,要让它们都 ...
- 【Shell脚本学习17】Shell case esac语句
case ... esac 与其他语言中的 switch ... case 语句类似,是一种多分枝选择结构. case 语句匹配一个值或一个模式,如果匹配成功,执行相匹配的命令.case语句格式如下: ...
随机推荐
- 转载:百为STM32开发板教程之十二——NAND FLASH
http://bbs.21ic.com/icview-586200-1-1.html 百为STM32开发板教程之十二——NAND FLASH 参考资料:百为stm32开发板光盘V3\百为stm32开发 ...
- 关于zookeeper的集群搭建
在所有机器上安装完zookeeper之后, 开始进行集群的搭建 1. 修改 ../zookeeper/conf/zoo.cfg 文件 tickTime=2000 dataDir=/usr/local/ ...
- python中lambda函数的笔记
学习网址为:https://foofish.net/lambda.html 通过lambda来定义一个匿名的函数,该匿名函数冒号前面的为函数传入值,冒号后面跟着的就是函数表达式. 例: lambda ...
- mysql 里面的isnull()和ifnull() is null 和 is not null
usergrade表 1.找到里面username是null的行 SELECT * FROM usergrade WHERE ISNULL(USERNAME) SELECT * FROM usergr ...
- 洛谷 P3358 最长k可重区间集问题 【最大费用最大流】
同 poj 3680 https:www.cnblogs.com/lokiii/p/8413139.html #include<iostream> #include<cstdio&g ...
- 【同步工具类】CountDownLatch
闭锁是一种同步工具类,可以延迟线程的进度直到其达到终止状态. 作用:相当于一扇门,在到达结束状态之前,这扇门一直是关闭的,并且没有任务线程能够通过,当到达结束状态时,这扇门会打开并允许所有的线程通过, ...
- quickpow || 快速幂
洛谷例题 推荐自行脑补:百度百科 如果 ,那么 : 前言:快速幂就是快速算底数的n次幂.其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高. 拿题目样例 Input :2 1 ...
- spring 获取配置文件的值
Spring 获取配置文件的值 package com.hafiz.www.util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; ...
- Python基础第一天
诞生时间:1991年,创造者Guido van Rossum 优点: 1.简单 Python是一种代表简单注意思想的语言 2.易学 Python是及其容易上手,因为Python有极其简单的说明文档 ...
- redis的安装使用以及一些常用的命令
Redis是一个key-value存储系统.并提供多种语言的API,我们可使用它构建高性能,可扩展的Web应用程序.目前越来越多的网站用它来当做缓存,减轻服务器的压力. 本文安装用的到redis是绿色 ...