基于C++ bitset常用函数及运算符(详解)

C++ bitset——高端压位卡常题必备STL

------------------------------------------------------------

以下内容翻译自cplusplus.com,极大地锻炼了我的英语能力。

bitset存储二进制数位。

bitset就像一个bool类型的数组一样,但是有空间优化——bitset中的一个元素一般只占1 bit,相当于一个char元素所占空间的八分之一。

bitset中的每个元素都能单独被访问,例如对于一个叫做foo的bitset,表达式foo[3]访问了它的第4个元素,就像数组一样。

bitset有一个特性:整数类型和布尔数组都能转化成bitset。

bitset的大小在编译时就需要确定。如果你想要不确定长度的bitset,请使用(奇葩的)vector<bool>。

定义一个bitset

// constructing bitsets
#include <iostream>  // std::cout
#include <string>   // std::string
#include <bitset>   // std::bitset

int main ()
{
 std::bitset<16> foo;
 std::bitset<16> bar (0xfa2);
 std::bitset<16> baz (std::string("0101111001"));

 std::cout << "foo: " << foo << '\n';
 std::cout << "bar: " << bar << '\n';
 std::cout << "baz: " << baz << '\n';

 return 0;
}

输出结果:

foo: 0000000000000000
bar: 0000111110100010
baz: 0000000101111001

bitset的运算

bitset的运算就像一个普通的整数一样,可以进行与(&)、或(|)、异或(^)、左移(<<)、右移(>>)等操作。

// bitset operators
#include <iostream>  // std::cout
#include <string>   // std::string
#include <bitset>   // std::bitset

int main ()
{
 std::bitset<4> foo (std::string("1001"));
 std::bitset<4> bar (std::string("0011"));

 std::cout << (foo^=bar) << '\n';  // 1010 (XOR,assign)
 std::cout << (foo&=bar) << '\n';  // 0010 (AND,assign)
 std::cout << (foo|=bar) << '\n';  // 0011 (OR,assign)

 std::cout << (foo<<=2) << '\n';  // 1100 (SHL,assign)
 std::cout << (foo>>=1) << '\n';  // 0110 (SHR,assign)

 std::cout << (~bar) << '\n';   // 1100 (NOT)
 std::cout << (bar<<1) << '\n';   // 0110 (SHL)
 std::cout << (bar>>1) << '\n';   // 0001 (SHR)

 std::cout << (foo==bar) << '\n';  // false (0110==0011)
 std::cout << (foo!=bar) << '\n';  // true (0110!=0011)

 std::cout << (foo&bar) << '\n';  // 0010
 std::cout << (foo|bar) << '\n';  // 0111
 std::cout << (foo^bar) << '\n';  // 0101

 return 0;
}

上面代码的输出结果见注释。(注意,这段代码涉及赋值操作)

bitset的相关函数

对于一个叫做foo的bitset:

foo.size() 返回大小(位数)
foo.count() 返回1的个数
foo.any() 返回是否有1
foo.none() 返回是否没有1
foo.set() 全都变成1
foo.set(p) 将第p + 1位变成1
foo.set(p, x) 将第p + 1位变成x
foo.reset() 全都变成0
foo.reset(p) 将第p + 1位变成0
foo.flip() 全都取反
foo.flip(p) 将第p + 1位取反
foo.to_ulong() 返回它转换为unsigned long的结果,如果超出范围则报错
foo.to_ullong() 返回它转换为unsigned long long的结果,如果超出范围则报错
foo.to_string() 返回它转换为string的结果

以上这篇基于C++ bitset常用函数及运算符(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • C++标准库bitset类型的简单使用方法介绍

    std::bitset是STL的一部分,准确地说,std::bitset是一个模板类,它的模板参数不是类型,而整形的数值(这一特性是ISO C++2003的新特性),有了它我们可以像使用数组一样使用位. #include<bister> using std::bitset; 一句话定义:可自定义位数,用作记录二进制的数据类型. 一,定义和初始化 bitset<n> b;                           //b有n位,每位都为0; bitset<n>

  • 基于C++ bitset常用函数及运算符(详解)

    C++ bitset--高端压位卡常题必备STL ------------------------------------------------------------ 以下内容翻译自cplusplus.com,极大地锻炼了我的英语能力. bitset存储二进制数位. bitset就像一个bool类型的数组一样,但是有空间优化--bitset中的一个元素一般只占1 bit,相当于一个char元素所占空间的八分之一. bitset中的每个元素都能单独被访问,例如对于一个叫做foo的bitset,

  • C# String常用函数的使用详解

    Remove Remove(int startIndex) 删除此字符串中从指定位置到最后位置的所有字符. Remove(int startIndex, int length) 从此实例中的指定位置开始删除指定数目的字符.Remove 会进行区域的检查. 对于第一种形式 当 startIndex 小于零 或 startIndex 指定的位置不在此字符串内: 对于第二种形式当 startIndex 或 count 小于零 或 startIndex 加 count 之和指定一个此实例外的位置. 会抛

  • Python中字典及遍历常用函数的使用详解

    目录 字典中元素的个数计算 字典中的键名 加粗样式字典中的键值 字典的键名以及对应的键值 字典的遍历 方法一 方法二 字典中元素的个数计算 len(字典名) 举例: person={"姓名":"张三","年龄":20,"性别":"男"} print(len(person)) 输出: 3 字典中的键名 字典名.keys() 举例: person={"姓名":"张三",&

  • Python中集合的创建及常用函数的使用详解

    目录 集合的创建 无序性 集合中的操作函数 在集合中添加元素 删除集合中的第一个元素 删除集合中的指定元素 判断元素是否在集合里面 集合的遍历 集合元素个数的计算 集合与字典,列表,元组的嵌套 集合与元组 集合与列表 集合的创建 使用内置函数set()进行转化或者使用{}包括起来的,集合中的元素:无序性,互异性,确定性. 举例: numbers=set(range(0,7))//使用内置函数进行转化 print(numbers) print(type(numbers)) 输出: {0, 1, 2

  • 基于PHP常用函数的用法详解

    复制代码 代码如下: <?php//===============================时间日期===============================//y返回年最后两位,Y年四位数,m月份数字,M月份英文.d月份几号数字,D星期几英文$date=date("Y-m-d");$date=date("Y-m-d H:i:s");//带时分秒 //include,include_once.require,require_once//require

  • 基于C/C++时间函数的使用详解

    C/C++对时间的操作也有许多值得大家注意的地方.最近,在技术群中有很多网友也多次问到过C++语言中对时间的操作.获取和显示等等的问题.下面,在这篇文章中,笔者将主要介绍在C/C++中时间和日期的使用方法.通过学习许多C/C++库,你可以有很多操作.使用时间的方法.但在这之前你需要了解一些"时间"和"日期"的概念,主要有以下几个:Coordinated Universal Time(UTC):协调世界时,又称为世界标准时间,也就是大家所熟知的格林威治标准时间(Gre

  • 基于mysql时间处理函数的应用详解

    DAYOFWEEK(date) 返回日期date的星期索引(1=星期天,2=星期一, --7=星期六).这些索引值对应于ODBC标准.  mysql> select DAYOFWEEK('1998-02-03');  -> 3 WEEKDAY(date)  返回date的星期索引(0=星期一,1=星期二, --6= 星期天).  mysql> select WEEKDAY('1997-10-04 22:23:00');  -> 5  mysql> select WEEKDAY

  • 基于C++字符串替换函数的使用详解

    在C++中,字符串替换有很多方法,这里主要说一下STL里的WString中的替换,虽然WString自带了一个Replace函数,但是只能替换一次,太不好了,因此单独写了个替换函数[函数] 复制代码 代码如下: /**         * @brief   实现字符串替换         * @param   orignStr 源串         * @param   oldStr  查找的串         * @param   newStr  替换的新串         * @return

  • 基于C语言fflush()函数的使用详解

    fflush用于清空缓冲流,虽然一般感觉不到,但是默认printf是缓冲输出的. fflush(stdout),使stdout清空,就会立刻输出所有在缓冲区的内容. fflush(stdout)这个例子可能不太明显,但对stdin很明显. 如下语句: int a,c; scanf("%d",&a); c=getchar(); 输入: 12(回车) 那么 a=12 ,c= '\n' 而: int a,c; scanf("%d",&a); fflush(

  • PHP读书笔记_运算符详解

    什么是运算符 什么是运算符?运算符是告诉PHP做相关运算的标识符号.例如,你需要计算123乘以456等于多少,这时候就需要一个符号,告诉服务器,你需要做乘法运算. PHP中的运算符有哪些?PHP运算符一般分为算术运算符.赋值运算符.比较运算符.三元运算符.逻辑运算符.字符串连接运算符.错误控制运算符. PHP中的算术运算符 算术运算符主要是用于进行算术运算的,例如:加法运算.减法运算.乘法运算.除法运算.在PHP中的常用的算术运算符对应下表: PHP中的赋值运算符 PHP的赋值运算符有两种,分别

随机推荐