c++ bitset用法

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

bitset储存二进制数位,和bool数组差不多,不过有空间优化,bitset中一个元素只占1bit,相当于一个char元素所占空间的八分之一。

bitset中的每个元素都像数组一样单独访问,下标从最右侧以0开始

使用bitset需要像数组一样提前确定大小

定义一个bitest

  • 定义一个已知长度的全为0的bitset,n必须是常量表达式,例如const或者define定义过的的

    conest int n = 100;
    #define n 100
    bitset<n>b;
    
  • 将一个十进制数x转换成二进制存在n位的bitset中,n小于等于unsigned long的最大值,如果x转换成2进制的长度len小于n,则高阶位补0;如果len大于n,则只保留低阶位的前n位,比如100转换成二进制是1100100,如果bitset只定义了5位,则bitset为00100,如果bitset定义了10位,则bitset为0001100100

    int n;
    cin>>n;
    bitset<10>b(n);
    
  • 将01字符串转换成bitset,注意!必须是01串,不然会re,有三个参数(s, pos, len),s即所需转换的字符串,pos为s的开始位置,len需要转换的长度,通常来说后两个省略的时候就默认是从头开始。如果s的长度大于n,则取s的前n位,如果s的长度小于n,则给高位补0,例如s = "111000",n为5时,bitest为11100,n为8时,bitset为00111000

    string s;
    cin>>s;
    bitset<10>b(s);
    
    string s;
    int pos, len;
    cin>>s;
    cin>>pos>>len;
    bitset<10>b(s, pos, len);
    

     

bitset的函数们

再次重申一遍,因为bitset是储存的二进制,所以下标是从最右侧以0开始,往左依次增大

  • b.set() 将b的所有位都置1
  • b.set(pos) 将b的第pos+1位置置1
  • b.reset() 将b的所有位都置0
  • b.reset(pos) 将b的第pos+1位置置0
  • b.flip() 将b全部位置都取反
  • b.flip(pos) 将b的第pos + 1位取反
  • b.count() 返回1的个数
  • b.size() 返回b的大小
  • b.any() 返回是否有1
  • b.to_ulong() 返回它转换为unsigned long的结果
  • b.to_ullong() 返回它转换成unsigned long long的结果
  • b.to_string() 返回它转换成string的结果

bitset的位运算们

bitset的位运算和普通的整数一样,可以&、|、^、<<、>>、~

bitset<10>b("1110001100");
bitset<10>c;
b ^= 7;
b &= 10;
b |= 3;
b >>= 2;
b <<= 5;
c = ~b;

 

博客内容均系原创,未经允许严禁转载!
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇