首页 > 其他分享 >Bitset用法

Bitset用法

时间:2023-07-31 09:57:45浏览次数:29  
标签:bar 函数 用法 按位 bitset false Bitset 赋值

众所周知\(Bitset\)可以将一些\(O(n)\)的操作优化为\(O(N/w)\)
相当于优化了\(>=\)一只\(log\)!!!

\(bitset\)每一位占一个\(bit\),而不是一个\(Byte\)!!!
若一次操作复杂度为 \(O(N)\)
\(bitset\)的操作复杂度为 \(O(N/w)\) \(w\)为计算机字长,\(w\)位系统字长为\(w\)
相比之下,空间也更优,为\(O(N/w)\)

\(Warning:\)标号与对应顺序相反

如 11110111 对应 标号76543210

一些函数

询问函数

  bitset<8> s("10011011"); //用字符串直接赋值 8为大小
  s.count()  //5  求bitset中1的位数
  s.size()   //8  求bitset的大小

  s.test(0)  //true   用来查下标处的元素是0还是1
  s.test(2)  //false  同理,s[2]为0,返回false

  s.any()   //true   any函数检查bitset中是否有1
  s.none()   //false  none函数检查bitset中是否没有1
  s.all()    //false  all函数检查bitset中是全部为1

  s.flip(x)  //将x标号对应的数取反
  s.flip()   //全取反

赋值函数

  bitset<N> s; //s大小为N
  s.reset(x) //将x赋值为0
  s.reset()  //全不重置为0
  s.set(x)   //将x赋值为1
  s.set()    //全不重置为1
  s[i]=1     //将bitset的第i位标记为1

转型函数

  s.to_string() //将bitset转换成string类型
  s.to_ulong    //将bitset转换成ul类型  长度不超过log(MAX_ul)
  s.to_ullong   //将bitset转换成ull类型 长度不超过log(MAX_ull)

\(Warning:\)\(bitset\)可以按位进行位运算
如:

      bitset<4> s(string("1001"));
      bitset<4> bar(string("0011"));
      s^=bar       //1010 (s对bar按位异或后赋值给s)
      s&=bar       //0010 (按位与后赋值给s)
      s|=bar       //0011 (按位或后赋值给s)
      s<<=2        //1100 (左移2位,低位补0,有自身赋值)
      s>>=1        //0110 (右移1位,高位补0,有自身赋值)
      ~bar         //1100 (按位取反)
      bar<<1       //0110 (左移,不赋值)
      bar>>1       //0001 (右移,不赋值)
      s==bar       //false (0110==0011为false)
      s!=bar       //true  (0110!=0011为true)
      s&bar        //0010 (按位与,不赋值)
      s|bar        //0111 (按位或,不赋值)
      s^bar        //0101 (按位异或,不赋值)

标签:bar,函数,用法,按位,bitset,false,Bitset,赋值
From: https://www.cnblogs.com/Diamondan/p/17592658.html

相关文章

  • C语言中.与->的用法介绍
    (一)基础结构体用点,结构体指针用箭头。a->b 的含义是 (*a).b****。  现代的标准化的C语义上来说, -> 可以用 * 和 . 的组合实现。简单的说,就是一个快捷方式,一个语法糖。(二)例子在机器码和汇编的角度来看,不存在变量,不存在struct这种东西,只存在寄存器和一个叫做内存的大数......
  • 【webpack系列】从基础配置到掌握进阶用法
    前言本篇文章将介绍一些webpack的进阶用法,演示内容继承自上一篇文章的内容,所以没看过上一篇文章的建议先学习上一篇内容再阅读此篇内容,会更有利于此篇的学习~文件指纹文件指纹指的是打包输出的文件名后缀,一般用来做版本管理、缓存等webpack的指纹策略有三种:hash、chunkhash、content......
  • luogu P3733 [HAOI2017] 八纵八横 题解【线段树分治+线性基+可撤销并查集+bitset】
    目录题目大意解题思路code题目大意题目链接给出一张\(n\)个点\(m\)条边的连通无向图,边带边权\(w_i\)。有以下三种操作,共\(q\)次:\(\centerdot\)在点\(x,y\)之间加入一条边权为\(w_i\)的边,如果这是第\(i\)个此种操作,则记这条新边为第\(i\)条。\(\centerdot\)将第\(k......
  • speech用法
    speech意为言论、口语、说话的方式、能力时,是不可数名词;意为演讲、讲话、台词时,是可数名词,其复数为speeches。发音为:英【spi:t】;美【spi:t】。   speech的用法  1、speechn.演讲、演说、发言,是可数名词,复数是speeches  speechon/aboutsth.有关某事......
  • ACM-knowledge <bitset>
    关于bitset,详见参考;#include<iostream>#include<bitset>usingnamespacestd;usingLL=longlong;intmain(){bitset<10>b1;cin>>b1;//1101;可直接读入01串;cout<<b1[0]<<endl;......
  • AsyncTask的用法
    原文链接:   在开发Android应用时必须遵守单线程模型的原则:AndroidUI操作并不是线程安全的并且这些操作必须在UI线程中执行。在单线程模型中始终要记住两条法则: 2.确保只在UI线程中访问AndroidUI工具包      当一个程序第一次启动时,Android会同时启动一个对应......
  • 反射的有关用法
    packagefanshe;publicclassFanshe{publicstaticvoidmain(String[]args){//第一种方式获取Class对象Studentstu1=newStudent();//这一new产生一个Student对象,一个Class对象。ClassstuClass=stu1.getClass();//获取Class对......
  • window.location.href的用法 导出数据
    一、前言window.location.href是一个用于获取当前页面URL或让浏览器跳转到新URL的重要方法,是window.location对象的属性。它返回一个字符串,表示当前页面的URL;同时,当通过将URL指定给window.location.href时,可以让浏览器跳转到新的URL。二、常见用例self.location.hre......
  • mysql中in的使用场景及用法举例说明?
    在MySQL中,IN运算符用于在WHERE子句中指定一个条件,以便从一个给定的列表中选择满足条件的值。IN运算符可以用于任何数据类型,包括数字、字符串和日期。下面是IN运算符的使用场景和用法的示例说明:使用IN运算符筛选特定值:查询订单表中订单状态为"已发货"或"已完成"的订单:SELECT......
  • numpy.tile()函数用法
    >>>importnumpy>>>numpy.tile([0,0],5)#在列方向上重复[0,0]5次,默认行1次array([0,0,0,0,0,0,0,0,0,0])>>>numpy.tile([0,0],(1,1))#在列方向上重复[0,0]1次,行1次array([[0,0]])>>>numpy.tile([0,0],(2,1))#在列方向上重复[0,0]1次,行2次array([[0......