您的位置:

c++bitset详解

一、c++bitset用法

c++bitset是C++ STL中的一个类,它是一个固定大小的bool数组,可以用来表示某些开关的状态,需要注意的是该数组为定长,而长度不可更改。示例如下:

#include 
#include 
   
using namespace std;
int main()
{
    bitset<5> bits1;    // 默认初始化,bits1中所有位都为0
    bitset<5> bits2(7); // bits2为二进制下的7,即bits2中为“00111”
    bitset<5> bits3("10101"); // bits3为"10101"
    
    cout<
    <<" "<
     <<" "<
      <
       
        

上述代码中通过调用不同的构造函数来对bits数组赋值,并且使用cout进行输出。

二、c++bitset中的索引方向

c++bitset中的索引是按照二进制数的高位到低位的顺序排列的,也就是说索引方向是从右到左。在bitset中,比特位的索引是从0开始的,例如bit[0]表示最低位(即最右边的位)。示例如下:

#include 
#include 
          
using namespace std;
int main()
{
    bitset<5> bits("10101");
    cout<
           <
            <
             <
              
               <
               
                <
                
                 

上述代码中的bitset表示二进制数“10101”,并且根据索引顺序输出该二进制数中各个位的值。

三、c++bitset容器

c++bitset主要是用来表示二进制数的,但是它也可以用来表示一些布尔类型的操作,例如对一个布尔型的数组进行操作等。示例如下:

#include 
#include 
                   
using namespace std;
int main()
{
    bool bArray[5] = {true, false, false, true, false};
    bitset<5> bits(bArray); // 将bArray转化为bits数组
    cout<
                    <<" "<
                     <
                      

                       

上述代码中的bArray为一个bool型数组,经过bitset构造函数的转化之后,将其转化为一个bitset类型的数组,再使用.count()函数来计算其中1的个数。

四、c++bitset转16进制

在c++中,将bitset类型转化为16进制是十分常见的操作,使用bitset的to_ulong()函数可以将bitset转为unsigned long类型,而unsigned long类型的数又可以通过printf来进行16进制输出。示例如下:

#include 
#include 
                         
using namespace std;
int main()
{
    bitset<8> bits("11001010");
    printf("%02lx\n", bits.to_ulong()); // 输出:CA
    return 0;
}

                         
                        

上述代码中的bitset表示二进制数“11001010”,使用.to_ulong()函数将其转化为unsigned long类型,然后使用printf以16进制输出该unsigned long类型的数值。其中%02lx的含义为:02表示最少要输出两个字符,不够两个字符则用0来补齐,l表示输出unsigned long类型,x表示输出16进制。

五、c++bitset中的索引

c++bitset数组是从0开始索引的,如果需要从右到左进行索引,可以使用.size()-1-i的方式进行索引。示例如下:

#include 
#include 
                         
using namespace std;
int main()
{
    bitset<5> bits("10101");
    for(int i = 0; i<5; i++)
        cout<
                          <<" ";  // 输出:1 0 1 0 1
    for(int i = 4; i>=0; i--)
        cout<
                           <<" ";  // 输出:1 0 1 0 1 
    return 0;
}

                           
                          
                         
                        

上述代码中,我们使用两种不同的方式来从左到右输出bitset数组中的元素值和从右到左输出数组元素值。

六、c++bitset查找第一个1

c++bitset中提供了一个函数来查找其中第一个1的位置。该函数返回一个字符串,由“0”和“1”组成,其中只有最后一个1前面的所有位置都是0。示例如下:

#include 
#include 
                         
using namespace std;
int main()
{
    bitset<8> bits("11001010");
    cout<
                          <<" "<
                           <
                            

                             

上述代码中,我们使用_Find_first()函数来查找bitset数组中的第一个1所在的位置。