c++bitset详解

一、c++bitset用法

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

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

// 输出为:00000 00111 10101

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

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

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

#include 
#include 
using namespace std;
int main()
{
    bitset bits("10101");
    cout<<bits[0]<<bits[1]<<bits[2]<<bits[3]<<bits[4]<<endl;  // 输出:10101
    return 0;
}

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

三、c++bitset容器

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

#include 
#include 
using namespace std;
int main()
{
    bool bArray[5] = {true, false, false, true, false};
    bitset bits(bArray); // 将bArray转化为bits数组
    cout<<bits<<" "<<bits.count()<<endl;  // 输出:10010 2
    return 0;
}

上述代码中的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 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 bits("10101");
    for(int i = 0; i<5; i++)
        cout<<bits[i]<=0; i--)
        cout<<bits[bits.size()-1-i]<<" ";  // 输出: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 bits("11001010");
    cout<<bits<<" "<<bits._Find_first()<<endl; // 输出:11001010 1
    return 0;
}

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

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/196307.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-03 09:56
下一篇 2024-12-03 09:56

相关推荐

  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • Java BigDecimal 精度详解

    一、基础概念 Java BigDecimal 是一个用于高精度计算的类。普通的 double 或 float 类型只能精确表示有限的数字,而对于需要高精度计算的场景,BigDeci…

    编程 2025-04-25
  • Python安装OS库详解

    一、OS简介 OS库是Python标准库的一部分,它提供了跨平台的操作系统功能,使得Python可以进行文件操作、进程管理、环境变量读取等系统级操作。 OS库中包含了大量的文件和目…

    编程 2025-04-25
  • MPU6050工作原理详解

    一、什么是MPU6050 MPU6050是一种六轴惯性传感器,能够同时测量加速度和角速度。它由三个传感器组成:一个三轴加速度计和一个三轴陀螺仪。这个组合提供了非常精细的姿态解算,其…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25
  • 详解eclipse设置

    一、安装与基础设置 1、下载eclipse并进行安装。 2、打开eclipse,选择对应的工作空间路径。 File -> Switch Workspace -> [选择…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25

发表回复

登录后才能评论