C++ STL之bitset位操作详解:从使用到底层,再到面试八股

详解C++中的bitset用法 bitset是C++标准库中用于处理固定大小二进制位序列的高效工具。它具有内存占用小(N位仅需约(N+7)/8字节)、操作高效(直接映射CPU指令)和接口丰富(支持位设置、测试、运算等)三大优势。使用时需在编译时确定大小,支持从数值或字符串初始化,提供安全的边界检查方法。典型应用包括状态标志、位图、筛法和布隆过滤器等。其局限性在于大小固定,不适合动态场景。总体而言,bitset是处理密集布尔数据的理想选择。 阅读详情

C++ STL之bitset位操作详解:从使用到底层,再到面试八股

本文面向面试和日常开发,先讲调用,再讲原理,最后给口语化面试答案。


一、bitset 是什么

bitset 是 C++ 标准库提供的编译期定长位集容器。它在栈上存储,完全内联,没有堆分配,也没有迭代器。核心区别一句话:

维度bitset<N>vector<bool>
长度编译期常量运行时动态
存储栈上紧凑位存储动态堆分配(专业版位压缩)
迭代器无有(代理迭代器)
性能零运行时开销,直接位运算间接访问,有代理对象开销

vector<bool> 虽然也做了位压缩,但它不是标准容器——标准明确规定 vector<bool> 不是 vector,它的 operator[] 返回的是代理对象而非引用。

二、用法速查

2.1 初始化与基本操作

#include <bitset>
#include <iostream>
#include <string>
using namespace std;

int main() {
    bitset<8> b1;                     // 00000000,全 0
    bitset<8> b2(42);                 // 00101010,从无符号 long 构造
    bitset<8> b3("10101010");         // 10101010,从字符串构造
    bitset<8> b4("1010", 4);          // 00001010,取前 4 位
    bitset<8> b5("10101010", 2, 4);   // 00001010,从 pos=2 取 4 位

    cout << b2 << "\n";               // 00101010
    cout << b3 << "\n";               // 10101010
}

2.2 访问与修改

#include <bitset>
#include <iostream>
using namespace std;

int main() {
    bitset<8> b(0b01101001);

    cout << b[0] << "\n";             // 1(最低位,从 0 开始)
    cout << b.test(3) << "\n";        // 0,带越界检查,越界抛 out_of_range
    cout << b.count() << "\n";        // 4,置位(值为1)的位数
    cout << b.size() << "\n";         // 8,总位数
    cout << b.any() << "\n";          // 1,是否存在 1
    cout << b.none() << "\n";         // 0,是否全 0
    cout << b.all() << "\n";          // 0,是否全 1

    b.set();                          // 11111111
    b.set(3, false);                  // 11110111,将位 3 置 0
    b.set(2);                         // 11110111 | 00000100 = 11111111
    b.reset();                        // 00000000
    b.reset(5);                       // 对全 0 的位 5 置 0,无影响
    b.flip();                         // 11111111
    b.flip(2);                        // 11111011
}

2.3 位运算

#include <bitset>
#include <iostream>
using namespace std;

int main() {
    bitset<4> a("1100");
    bitset<4> b("1010");

    cout << (a & b) << "\n";          // 1000  与
    cout << (a | b) << "\n";          // 1110  或
    cout << (a ^ b) << "\n";          // 0110  异或
    cout << (~a)  << "\n";            // 0011  取反(对全部 N 位)

    cout << (a << 1) << "\n";         // 1000  左移,低位补 0
    cout << (b >> 1) << "\n";         // 0101  右移,高位补 0
}

2.4 类型转换

#include <bitset>
#include <iostream>
#include <string>
using namespace std;

int main() {
    bitset<8> b(170);                 // 10101010

    unsigned long ul = b.to_ulong();  // 170
    unsigned long long ull = b.to_ullong();  // C++11,170

    string s = b.to_string();         // "10101010"
    // 可指定字符
    string t = b.to_string('Y', 'N'); // "YNYNYNYN"
}

三、核心特性

3.1 编译期定长

bitset<N> 的 N 必须是编译期常量表达式。编译器将整个位集展开为一个整数数组(或一个超大整数),所有操作无虚函数、无堆分配,可以极致内联。

constexpr size_t N = 1024;
bitset<N> b;  // OK,N 是 constexpr

size_t n = 1024;
// bitset<n> b2;  // 编译错误!n 不是编译期常量

3.2 bitset vs 手写位操作 vs vector

场景推荐原因
定长标记、掩码bitset安全、可读、零开销
动态长度位图vector<bool>运行时才知道大小
高性能计算手写 uint64_t[]可 SIMD 向量化
海量数据去重std::vector<bool> 或自定义位图bitset 栈上限约 1MB

关于栈溢出:bitset<1000000> 约 125KB,通常在栈上没问题。bitset<10000000> 约 1.19MB,可能爆栈。

四、面试高频题

题 1:判断一个数是否是 2 的幂

bool isPowerOfTwo(int n) {
    return n > 0 && (n & (n - 1)) == 0;
}

用 bitset 也能写,但位运算本身就够了。bitset 的考点不在这里,继续看。

题 2:统计二进制中 1 的个数

size_t countOnes(unsigned int n) {
    return bitset<32>(n).count();
}

bitset::count() 内部用 __builtin_popcount 或硬件指令(POPCNT),O(1) 或 O(log位数),远快于手写循环。

题 3:二进制翻转(镜像反转)

#include <bitset>
#include <iostream>
using namespace std;

unsigned int reverseBits(unsigned int n) {
    bitset<32> b(n);
    bitset<32> rev;
    for (size_t i = 0; i < 32; ++i)
        rev[i] = b[31 - i];
    return rev.to_ulong();
}

题 4:用 bitset 实现埃拉托色尼质数筛

#include <bitset>
#include <iostream>
#include <cmath>
using namespace std;

const int N = 1000000;
bitset<N + 1> isPrime;

void sieve() {
    isPrime.set();                     // 先假设全是质数
    isPrime[0] = isPrime[1] = false;   // 0 和 1 不是

    for (int i = 2; i * i <= N; ++i) {
        if (isPrime[i]) {
            for (int j = i * i; j <= N; j += i)
                isPrime[j] = false;
        }
    }
}

int countPrimes(int n) {
    sieve();
    int cnt = 0;
    for (int i = 2; i <= n; ++i)
        if (isPrime[i]) ++cnt;
    return cnt;
}

bitset 筛的优势:每个标记只占 1 位,内存 = N/8 字节(1M 的筛仅 125KB),set/reset 直接对应位操作,性能优于 vector<bool> 和 vector<char>。

是

否

循环结束

初始:isPrime 全部置 1

i 从 2 到 sqrt(N)

isPrime[i] 为真?

将 i², i²+i, i²+2i... 全部置 0

i 自增

筛选完成

isPrime 中仍为 1 的下标
即为质数

题 5:检测两个整数是否有相同位模式的奇偶性

bool sameParityOfBits(unsigned int a, unsigned int b) {
    return bitset<32>(a).count() % 2 == bitset<32>(b).count() % 2;
}

题 6:用 bitset 做子集枚举

#include <bitset>
#include <iostream>
using namespace std;

void enumerateSubsets(int arr[], int n) {
    for (int mask = 0; mask < (1 << n); ++mask) {
        bitset<32> b(mask);
        cout << "子集: ";
        for (int i = 0; i < n; ++i)
            if (b[i]) cout << arr[i] << " ";
        cout << "\n";
    }
}

这是状态压缩 DP 的经典用法,bitset 让掩码的位操作语义更清晰。

题 7:两个大 bitset 的汉明距离

size_t hammingDistance(bitset<1024>& a, bitset<1024>& b) {
    return (a ^ b).count();  // 异或后数 1 的个数
}

一行搞定。手写大位图异或 + popcount 至少 5 行循环。

题 8:bitset 实现有限状态机

enum State { S0, S1, S2, S3, STATE_COUNT };
bitset<STATE_COUNT> cur;

void transit() {
    bitset<4> next;
    // S0 -> S1
    if (cur[S0]) next.set(S1);
    // ... 其他转移规则
    cur = next;
}

适合状态数少、转移规则的组合逻辑较复杂的场景。面试时提到这一点会加分,说明你理解 bitset 的工程应用。

五、常见坑

  1. 下标顺序:b[0] 是最低位(LSB),输出时从左到右是高位到低位,cout << b 打印 高位...低位。
  2. 越界不抛:b[i] 不检查边界,b.test(i) 才抛异常。
  3. 栈空间:bitset<100000000> 约 12MB 会爆栈,大位图请用 vector<bool> 或堆分配。
  4. to_ulong 溢出:如果 bitset 超过 unsigned long 位数(通常是 32 或 64),调用 to_ulong() 会抛 overflow_error。

六、面试速记

Q:bitset 和 vector<bool> 的区别?

bitset 长度编译期固定,栈上分配,没有动态开销,支持完整的位运算操作符。vector 运行时动态,堆上分配,特化版本在位压缩的同时保留容器接口(push_back 等),但它的 operator[] 返回代理对象,不能取引用,严格来说不是标准容器。

Q:什么场景用 bitset?

固定长度的标记位、有限状态机、状态压缩 DP、小规模质数筛(几百万以内),以及任何需要紧凑位存储+高效位运算的地方。超过运行时才能确定长度、需要动态扩容的场景,老老实实用 vector。


下一期预告:C++ STL 之 tuple 元组详解。

bitset的用法 阅读详情

相关推荐

【算法竞赛学习笔记】Bitset详解和应用

title : bitset date : 2021-8-20 tags : ACM,数据结构 author : Linno Bitset bitset是一种类似数组的数据结构,它的每一个元素只能是0或1,每个元素只用1bit的空间。可以使用只包含‘0’或‘1’的字符串构造。 优点 支持所有的位运算。 空间占用非常小,也可用于优化时间。 声明方式 #include<bitset> bitset<30>bi; string s="100101"; bitset<10>.

SC_Linno的博客 2702

C++之std::bitset使用精讲(全)

bitset满足可复制构造 (CopyConstructible)及可复制赋值 (CopyAssignable)的要求。下面是// 创建一个长度为 N 的 bitset,所有位都被初始化为 0// 使用二进制整数 value 初始化一个长度为 N 的 bitset// 使用二进制字符串 string 初始化一个长度为 N 的 bitset//用整个字符串来初始化bitset// 使用另一个 bitset 初始化一个长度为 N 的 bitset。

红军不怕远征难,万水千山只等闲 3万+

C++位操作与bitset:从底层原理到高性能编程实战

位操作是计算机科学中处理二进制数据的基础技术,它允许程序员直接在比特级别进行运算,如与、或、异或及移位操作。其核心原理在于利用处理器对整型数据的原生支持,实现极高的运算效率和紧凑的内存使用。这种技术价值在于能够显著优化性能关键路径,例如通过一个整型变量存储多个布尔标志,将内存占用降低数倍。在应用场景上,位操作广泛用于系统编程、嵌入式开发、网络协议解析、加密算法及高性能算法中。本文聚焦于C++中的位运算技巧及其标准库组件bitset,通过剖析掩码操作、状态压缩等热词,并结合布隆过滤器等实战案例,帮助开发者掌握

weixin_32612263的博客 275

bitset详解

bitset常见用法详解

行码棋 1万+

C++ bitset完全指南:从位数组到位运算实战优化

在计算机底层,一切数据最终都以二进制位(bit)呈现,而高级语言中的布尔类型往往为了寻址便利牺牲了空间效率——一个 bool 在 C++ 中通常占用 1 字节,却只存储 0 或 1,造成了 8 倍的内存浪费。面对大量是/否状态的记录场景,如数字去重、任务依赖标记、每日签到等,这种存储方式显然不够经济。C++ 标准库中的 std::bitset 正是为解决这一痛点而设计:它在编译期固定长度,内部按位紧凑存储,内存占用仅为 bool 数组的八分之一,并原生支持按位与、或、异或、移位等批量操作,让集合求交、并集、

weixin_29306571的博客 219

C++挑战赛核心考点与实战拆解:从算法到工程化思维

在计算机编程领域,算法与数据结构是解决复杂问题的基石,其核心价值在于通过高效的数据组织和计算逻辑,将现实问题转化为可执行的解决方案。理解经典算法如动态规划、图论搜索的原理,掌握数据结构如线段树、单调栈的实现,是评估开发者基本功的关键。这些技术广泛应用于系统设计、性能优化和数据处理等场景。本文聚焦C++竞赛实战,深入剖析了装箱问题、埃氏筛法等高频算法考点,并结合现代C++特性与工程化实践,为备赛者提供从问题抽象到代码实现的系统性解题框架。

weixin_33829657的博客 325

C++ STL实战指南:从容器、迭代器到算法与内存管理的全面解析

泛型编程是现代C++高效开发的核心思想,它通过模板技术实现了数据结构和算法的解耦与复用。其原理在于将类型参数化,使得同一套代码能够适用于多种数据类型,从而大幅提升代码的复用性和开发效率。这一技术的核心价值在于构建了标准化的组件库,让开发者无需重复造轮子,并能专注于业务逻辑。在系统编程、高性能计算和大型软件框架等应用场景中,泛型编程思想尤为重要。C++标准模板库(STL)正是这一思想的典范实现,它通过容器、迭代器、算法等组件的协同,提供了强大的通用编程能力。本文深入探讨了STL的六大组件架构,并重点解析了容器

weixin_33742618的博客 507

C++模板进阶:从SFINAE到概念约束的元编程实战指南

C++模板作为泛型编程的核心机制,通过编译期代码生成实现类型安全的抽象。其原理基于模板实例化、特化与参数推导,能够在编译阶段完成类型计算与策略选择,从而提升运行时性能与代码复用性。在工程实践中,模板技术广泛应用于标准库容器、算法以及高性能计算库的开发,通过SFINAE、标签分发等机制实现编译期条件分支。现代C++进一步引入变参模板、别名模板及概念约束,显著改善了模板代码的可读性与错误提示。本文聚焦于模板元编程的进阶应用,涵盖类型萃取、编译期计算等高级技巧,帮助开发者从语法使用者转变为模板设计者,构建灵活高效

weixin_34248705的博客 315

C++ STL容器时间复杂度全解析:从数据结构到性能优化实战

在C++开发中,数据结构的选择直接影响程序性能。理解不同数据结构的时间复杂度是优化代码的基础,例如数组支持O(1)随机访问但插入成本高,链表支持O(1)插入但查找效率低。红黑树和哈希表分别提供O(log n)和平均O(1)的查找性能,但各有适用场景。这些原理在工程实践中价值显著,能帮助开发者避免性能陷阱,比如在C++面试题中常被问及的vector扩容策略和unordered_map哈希冲突问题。掌握STL容器的底层实现与时间复杂度对比,能让你在海量数据处理、高频交易系统等场景中做出最优选择,显著提升代码效率

weixin_33922670的博客 479

SAP ABAP ALV表格实战:5分钟搞定单元格下拉框配置(附完整代码)

本文详细介绍了在SAP ABAP开发中如何快速配置ALV表格的单元格下拉框功能,通过5分钟实战教程帮助开发者掌握关键步骤。文章包含完整的ABAP代码示例,涵盖下拉值定义、字段目录配置及ALV控件绑定等核心操作,特别适合需要实现财务系统费用类型选择或采购系统物料分类等场景的开发者参考。

weixin_28331555的博客 111

ICC 实战解析——CTS 时钟树综合中的关键设置与优化策略

本文深入解析ICC工具中CTS时钟树综合的关键设置与优化策略,涵盖时钟树异常引脚设置、目标参数配置、非默认布线规则(NDR)等核心技术。通过实战案例展示如何有效控制时钟偏差、优化信号完整性,并平衡功耗与面积,为芯片物理设计提供专业指导。

weixin_30872577的博客 325

C++ STL空间配置器:内存管理核心原理与性能优化实战

内存管理是编程中的基础概念,它涉及程序运行时对内存资源的分配、使用和回收。其核心原理在于高效利用有限的内存空间,减少碎片化,并提升访问速度。在C++中,标准模板库(STL)通过空间配置器(Allocator)这一关键技术组件,将内存分配与对象构造分离,实现了泛型容器的高效内存管理。这一设计具有重要的技术价值,它允许开发者针对特定场景(如高频交易、游戏服务器或嵌入式系统)定制内存策略,从而优化性能、减少系统调用开销并控制内存碎片。应用场景广泛,从通用服务到对实时性、内存占用敏感的专用领域。本文聚焦于**SGI

weixin_34393428的博客 392

谷粒商城学习笔记-15-数据库初始化

这一节的主要内容是把创建对应的数据库和数据库表。

epitomizelu的专栏 1438

C++标准库实战指南:从C风格到现代C++的高效编程

在C++编程中,标准库是提升代码质量与开发效率的核心工具。其设计基于RAII(资源获取即初始化)等关键原理,通过自动管理内存和资源,有效解决了C风格编程中常见的内存泄漏和缓冲区溢出问题。从工程实践角度看,标准库的价值在于提供了类型安全、高性能且易于维护的组件,如智能指针、容器和算法,这些组件经过高度优化,能显著提升程序性能。在实际应用场景中,无论是开发游戏引擎、计算机视觉项目(如OpenCV),还是构建高性能服务器,深入理解并正确使用标准库都是编写健壮代码的基础。本文聚焦于C++标准库的实战应用,剖析了从C

weixin_34161029的博客 333

Windows系统下LaTeX环境搭建与编辑器配置全攻略

本文详细介绍了在Windows系统下搭建LaTeX环境的完整流程,包括TeX Live的安装、TeXStudio编辑器的配置优化以及常见问题排查。特别针对中文用户推荐使用清华镜像源加速下载,并提供了XeLaTeX编译器配置、中文支持等实用技巧,帮助用户快速上手LaTeX文档编写。

weixin_42554408的博客 449

Tessent Atpg系列 第七章 Running ATPG Patterns -- 如何书写proc文件

本篇文章是记录Tessent scan ATPG系列 本文并非是对userguide的完全翻译,而是自己对userguide的理解,此外,有部分比较深入的内容可能需要后续实验验证。本系列并不对tessent scan做过多描述。 请勿随意转载: 优快云 博主: ciscomonkey一种是在使用tessent scan之后使用ATPG 另一种是使用第三方工具,如snps的DFTC之后使用tessent的ATPG。 这里我们仅仅介绍without tessent scan之后tessent ATPG:对于t

ciscomonkey的博客 7695

C++素数筛实战:埃氏筛与线性筛的工程选型与优化

素数筛是算法与系统编程交汇的基础技术,其核心在于理解时间复杂度背后的硬件执行逻辑。埃氏筛以O(n log log n)的简洁性与高缓存友好性,成为10^7量级工业场景的默认选择;线性筛虽理论最优,但受限于分支预测、内存局部性与溢出控制等实操瓶颈。掌握bool数组、bitset、vector<char>的空间-性能权衡,结合-O2编译、流同步关闭、双指针查表等工程技巧,才能让算法真正跑进现实约束。本文聚焦C++底层实践,覆盖AcWing高频模板题的全链路调优。

weixin_34014555的博客 397

脑电分析:为什么大脑信号会“变同步”?——事件相关同步化与去同步化 (ERS/ERD) 全景解析

脑电分析中的事件相关同步化(ERS)和去同步化(ERD)是研究大脑动态节律的重要方法,反映特定任务下脑电频段能量的变化。ERD表示神经元活动分散(功率下降),提示脑区活跃处理信息;ERS则反映神经元同步(功率增强),常与静息状态相关。本文详解了ERS/ERD的生理机制、计算流程(包括基线校正和功率谱分析),并提供了Python实现示例,展示如何通过Welch法和STFT进行时频分析,生成ERD/ERS热力图。该技术广泛应用于运动想象脑机接口、癫痫检测等领域,为理解大脑功能状态提供了量化工具。

qq_32516809的博客 1396

C++容器性能对比:vector与array的内存管理与适用场景详解

在C++编程中,容器是管理数据集合的核心工具,其选择直接影响程序的性能与稳定性。从内存管理原理来看,容器主要分为动态与静态两种类型,动态容器如vector在堆上分配内存,支持运行时扩容,而静态容器如array在栈上分配,大小固定。这种差异决定了它们的技术价值:动态容器提供了灵活性,适合处理未知或变化的数据量;静态容器则提供了确定性和极致的性能,尤其在缓存友好性方面表现突出。在应用场景上,高性能计算、嵌入式系统、游戏开发等对性能敏感的场景中,容器的选择尤为关键。本文聚焦于C++标准库中的vector和arra

weixin_34343308的博客 310

PM1132-220V转5V电源芯片:SOT-23-3封装的高效电源解决方案

在现代电子设备小型化和高效化的趋势下,PM1132芯片凭借其的能力与特性,成为工业控制IoT设备及便携电器的理想电源管理方案。以下从核心技术设计挑战和应用实践展开分析。

M_D13Z476I000l的博客 804

YOLO11改进大全:卷积层、轻量化、注意力机制、损失函数、Backbone、SPPF、Neck、检测头全方位优化汇总

YOLOv11改进大全:卷积层、轻量化、注意力机制、损失函数、Backbone、SPPF、Neck、检测头全方位优化汇总

魔改工程师的博客 4529

C++位运算实战指南:从核心原理到高性能应用

位运算作为计算机底层的基本操作,直接对整数的二进制位进行操作,是实现极致性能优化的关键技术。其核心原理在于利用CPU的位级指令,通过按位与(&)、或(|)、异或(^)、取反(~)及移位(<<, >>)等操作,实现对数据的精细控制。这项技术的核心价值在于能以接近零成本的方式,大幅提升内存利用率和计算效率,是连接高级逻辑与底层硬件性能的关键桥梁。在应用场景上,位运算广泛应用于标志位管理、状态压缩、网络协议解析、图形处理及嵌入式系统等对性能要求苛刻的领域。本文以C++为例,深入解析位运算的实战技巧与常见陷阱,例如

diaohuyi6830的博客 511

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

C++编译时多态:函数重载与模板的零开销抽象实战解析

多态性是面向对象编程的核心概念,它允许同一接口在不同上下文中表现出不同行为。在C++中,多态性主要通过编译时多态和运行时多态两种机制实现,前者在编译阶段确定具体行为,后者在运行阶段通过虚函数表动态分发。编译时多态的核心价值在于实现零开销抽象,通过函数重载和模板技术,在保持类型安全的同时消除运行时性能开销。这种技术特别适用于高性能计算、泛型编程和系统级开发等场景,能够显著提升代码执行效率。本文深入探讨了C++编译时多态的实现原理,重点分析了函数重载的决议机制和模板的实例化过程,并通过实际案例展示了如何避免常见

weixin_34060299的博客 343

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

C++ bitset(位图)的介绍和使用

面试题给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。【腾讯】遍历,时间复杂度O(N)排序(O(NlogN)),利用二分查找: logN单从方法上来说这两种方法都是可以的,但是从内存上来说,这里有40亿个整数,换算一下就相当于16G,也就是说要操作这些数据的话需要占用16G的内存,内存消耗是很大的,所以从内存上来看,这两种方法都是不合适的。位图解决。

m0_74189279的博客 4256

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

STL中便捷的bitset

有些程序要处理二进制位的有序集,每个位可能包含的是0(关)或1(开)的值。位是用来保存一组项或条件的yes/no信息(有时也称标志)的简洁方法。标准库提供了bitset类使得处理位集合更容易一些。要使用bitset类就必须要包含相关的头文件。在本书提供的例子中,假设都使用了std::bitset的using声明:

浮白 4305

bitset 用法整理

在项目中需要使用到10进制48位的数字按二进制由高到低解释,然后按每一位是0还是1来判断报警或错误状态。 所以,在Linux中的C++下需要用到二进制转换以及按位解析。收集到了一些资料,自己保存一下啊。   如下: bitset 用法整理 构造函数 bitset b; b有n位,每位都为0.参数n可以为一个表达式. 如bitset b0;则"b0"为"00000";

eecrazy的专栏 2万+
上一篇: C++ STL之sort系列深度剖析:从使用到底层,再到面试八股
下一篇: C++ STL 之 atomic 与内存序详解
Ricky_Theseus
博客等级 码龄3年 126粉丝 158原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ricky_Theseus

感谢大家,祝您生活愉快

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值