,,详解C++ bitset用法

,,详解C++ bitset用法

本文主要介绍C bitset的用法,通过示例代码介绍的非常详细,对大家的学习或工作有一定的参考价值。有需要的朋友下面和边肖一起学习。

C 1bitset在bitset头文件中,是一个类似数组的结构。它的每个元素只能是0或1,每个元素只使用1比特空间。

以下是具体用法。

构造函数

bitset有四种常见的构造函数,如下所示

位集4位集1;//无参数构造,长度为4,每一位默认为0。

位集8位集2(12);//长度为8,二进制存储,前面补0。

字符串s=' 100101

位集10位集3(s);//长度为10,前面补0。

char S2[]=' 10101 ';

位集13位集4(S2);//长度为13,前面补0

cout位集endl//0000

cout位集endl//00001100

cout位集endl//0000100101

cout位集endl//0000000010101

注意:

用字符串构造时,字符串只能包含“0”或“1”,否则将引发异常。

构造时,需要在中指明位集的大小(即size)。

用参数构造时,如果参数的二进制表示小于bitset的大小,就会在前面补上0(如上面的栗子);如果大于bitsize,参数为整数时取后面部分,参数为字符串时取前面部分(比如下面的chestnut):

位集2位集1(12);//12的二进制是1100(长度4),但是bitset1的size=2,只取后半部分,即00。

字符串s=' 100101

位集4位集2(s);//s的size=6,而bitset的size=4,只取前面的部分,也就是1001。

char S2[]=' 11101 ';

位集4位集3(S2);//同bitset2,只取前面部分,即1110。

cout位集endl//00

cout位集endl//1001

cout位集endl//1110

可用的操作符

Bitset有一个用于二进制的位运算符,如下所示

bit set 4 foo(string(' 1001 '));

bitset 4 bar(string(' 0011 '));

cout(foo^=bar)endl;//1010(对bar进行按位异或运算后,将foo赋值给foo)

cout(foo=bar)endl;//0010(按位及之后赋值给foo)

cout(foo |=bar)endl;//0011(按位或之后赋值给foo)

cout(foo=2)endl;//1100(左移2位,低位填0,有自己的赋值)

cout(foo=1)endl;//0110(右移1位,高位填0,有自己的赋值)

cout(~ bar)endl;//1100(位反转)

cout(bar 1)endl;//0110(左移,不赋值)

cout(bar 1)endl;//0001(右移,不赋值)

cout(foo==bar)endl;//false (0110==0011为false)

cout (foo!=bar)endl;//true (0110!=0011为真)

cout(foobar)endl;//0010(按位AND,不赋值)

cout(foo | bar)endl;//0111(按位或,不赋值)

cout(foo^bar)endl;//0101(按位异或,不赋值)

此外,您可以通过[]访问元素(如数组)。请注意,最低位下标为0,如下所示:

bit set 4 foo(' 1011 ');

cout foo[0]endl;//1

cout foo[1]endl;//1

cout foo[2]endl;//0

当然也可以这样给某个元素赋值,栗子就不收起来了。

可用函数

Bitset还支持一些有趣的功能,例如:

bitset 8 foo(' 10011011 ');

cout foo . count()endl;//5(count函数用于查找bitset中1的个数。foo里有5个1。

cout foo . size()endl;//8(size函数用来求bitset的大小,有8位。

cout foo . test(0)endl;//true(测试函数用于检查下标处的元素是0还是1,返回false还是true,其中foo[0]为1,返回true。

cout foo . test(2)endl;//false(同理,foo[2]为0,返回false。

cout foo . any()endl;//true(任意函数检查bitset中是否有1。

cout foo . none()endl;//false(none函数检查bitset中是否没有1。

cout foo . all()endl;//false(all函数检查位集中的全1

注意:测试函数将检查下标是否越界,但是通过[]访问元素将不会通过下标检查。因此,在两种方法通用的情况下,选择测试函数更为安全。

此外,还有一些功能:

bitset 8 foo(' 10011011 ');

cout foo . flip(2)endl;///10011111(flip当flip函数传递参数时,用来对参数位取反。这一行代码把foo下标2‘反转’了,也就是0变1,1变0。

cout foo . flip()endl;//01100000(当flip函数不指定参数时,反转bitset的每一位。

cout foo . set()endl;//11111111(当set函数没有指定参数时,将bitset的所有位设置为1。

cout foo.set(3,0)endl;//11110111(当set函数指定两位参数时,将第一个参数位的元素设置为第二个参数的值。这一行中对foo的操作相当于foo[3]=0。

cout foo . set(3)endl;//11111111(当设置的函数只有一个参数时,将参数下标视为1。

cout foo . reset(4)endl;//1101111(当reset函数传递一个参数时,参数下标被视为0。

cout foo . reset()endl;///00000000(reset reset函数不传递参数,bitset的所有位都设置为0。

同样,它们都检查下标是否越界,如果越界就抛出异常。

最后,还有一些类型转换的函数,如下所示:

bitset 8 foo(' 10011011 ');

string s=foo . to _ string();//将位集转换为字符串类型

无符号长整型a=foo . to _ ulong();//将位集转换为无符号长整型

无符号long long b=foo . to _ ullong();//将位集转换为无符号long long类型

cout s endl//10011011

cout a endl//155

cout b endl//155

以上是边肖介绍的C bitset用法的详细讲解和集成。希望对你有帮助。如果您有任何问题,请给我留言,边肖将及时回复您。非常感谢您对我们网站的支持!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • vs2015打包安装程序,vs2015程序打包,VS2022实现VC++打包生成安装文件图文详细历程
  • vc++6.0的快捷键,vc 快捷键
  • vc++6.0的快捷键,vc 快捷键,VC6.0常用快捷键大全
  • 绘制圆角矩形的方法,c++ 画矩形,C#画圆角矩形的方法
  • 懒汉式和饿汉式代码,单列模式懒汉和饿汉,C++单例模式的懒汉模式和饿汉模式详解
  • 好用的C++编译器,c++编译软件哪个好
  • semaphore c#,c++ semaphore
  • semaphore c#,c++ semaphore,C++中Semaphore内核对象用法实例
  • dev-c++使用教程,dev c++安装教程
  • dev-c++使用教程,dev c++安装教程,Dev C++ 安装及使用方法(图文教程)
  • C里面指针常量和常量指针的区别,c++指针常量和常量指针
  • C里面指针常量和常量指针的区别,c++指针常量和常量指针,简单总结C++中指针常量与常量指针的区别
  • com组件初始化失败,c#开发com组件,C++中COM组件初始化方法实例分析
  • c++静态成员变量使用,c++静态成员函数和静态成员变量
  • c++静态成员变量使用,c++静态成员函数和静态成员变量,详解c++ 静态成员变量
  • 留言与评论(共有 条评论)
       
    验证码: