本页内容

QBitArray Class

QBitArray 类提供了一个位数组。更多内容...

头文件: #include <QBitArray>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

注意:该类中的所有函数均为可重入的。

QBitArray 比较

类别可比较类型
相等性QBitArray

公共函数

QBitArray()
QBitArray(qsizetype size, bool value = false)
QBitArray(const QBitArray &other)
QBitArray(QBitArray &&other)
bool at(qsizetype i) const
const char *bits() const
void clear()
void clearBit(qsizetype i)
qsizetype count() const
qsizetype count(bool on) const
bool fill(bool value, qsizetype size = -1)
void fill(bool value, qsizetype begin, qsizetype end)
bool isEmpty() const
bool isNull() const
void resize(qsizetype size)
void setBit(qsizetype i)
void setBit(qsizetype i, bool value)
qsizetype size() const
void swap(QBitArray &other)
bool testBit(qsizetype i) const
(since 6.0) quint32 toUInt32(QSysInfo::Endian endianness, bool *ok = nullptr) const
bool toggleBit(qsizetype i)
void truncate(qsizetype pos)
QBitArray &operator&=(QBitArray &&other)
QBitArray &operator&=(const QBitArray &other)
QBitArray &operator=(QBitArray &&other)
QBitArray &operator=(const QBitArray &other)
QBitRef operator[](qsizetype i)
bool operator[](qsizetype i) const
QBitArray &operator^=(QBitArray &&other)
QBitArray &operator^=(const QBitArray &other)
QBitArray &operator|=(QBitArray &&other)
QBitArray &operator|=(const QBitArray &other)

静态公共成员

QBitArray fromBits(const char *data, qsizetype size)
bool operator!=(const QBitArray &lhs, const QBitArray &rhs)
QBitArray operator&(QBitArray &&a1, QBitArray &&a2)
QBitArray operator&(QBitArray &&a1, const QBitArray &a2)
QBitArray operator&(const QBitArray &a1, QBitArray &&a2)
QBitArray operator&(const QBitArray &a1, const QBitArray &a2)
QDataStream &operator<<(QDataStream &out, const QBitArray &ba)
bool operator==(const QBitArray &lhs, const QBitArray &rhs)
QDataStream &operator>>(QDataStream &in, QBitArray &ba)
QBitArray operator^(QBitArray &&a1, QBitArray &&a2)
QBitArray operator^(QBitArray &&a1, const QBitArray &a2)
QBitArray operator^(const QBitArray &a1, QBitArray &&a2)
QBitArray operator^(const QBitArray &a1, const QBitArray &a2)
QBitArray operator|(QBitArray &&a1, QBitArray &&a2)
QBitArray operator|(QBitArray &&a1, const QBitArray &a2)
QBitArray operator|(const QBitArray &a1, QBitArray &&a2)
QBitArray operator|(const QBitArray &a1, const QBitArray &a2)
QBitArray operator~(QBitArray a)

详细说明

QBitArray 是一种数组,既允许访问单个位,又提供了作用于整个位数组的运算符(AND 、OR 、XOR 和NOT )。它采用隐式共享(写时复制)机制来减少内存占用,并避免不必要的数据复制。

以下代码构建了一个包含 200 个位且初始化为 false(0)的 QBitArray:

QBitArray ba(200);

若要将位初始化为 true,可以将 `true ` 作为第二个参数传递给构造函数,或者在后续调用 `fill()` 方法。

QBitArray采用与C++数组相同的0起始索引。要访问特定索引位置的位,可以使用operator[]()。对于非const位的数组,operator[]()返回对该位的引用,该引用可用于赋值语句的左侧。例如:

QBitArray ba;
ba.resize(3);
ba[0] = true;
ba[1] = false;
ba[2] = true;

出于技术原因,使用testBit() 和setBit() 访问数组中的位比使用 operator[]() 更高效。例如:

QBitArray ba(3);
ba.setBit(0, true);
ba.setBit(1, false);
ba.setBit(2, true);

QBitArray 支持& (AND)、| (OR)、^ (XOR)、~ (NOT),以及&= 、|= 和^= 。这些运算符的工作方式与同名的 C++ 内置位运算符相同。例如:

QBitArray x(5);
x.setBit(3, true);
// x: [ 0, 0, 0, 1, 0 ]

QBitArray y(5);
y.setBit(4, true);
// y: [ 0, 0, 0, 0, 1 ]

x |= y;
// x: [ 0, 0, 0, 1, 1 ]

出于历史原因,QBitArray 将“空指针位数组”与“空位数组”区分开来。空指针位数组是指使用 QBitArray 的默认构造函数初始化的位数组。空位数组则是任何大小为 0 的位数组。空指针位数组总是空的,但空位数组不一定是空指针位数组:

QBitArray().isNull();           // returns true
QBitArray().isEmpty();          // returns true

QBitArray(0).isNull();          // returns false
QBitArray(0).isEmpty();         // returns true

QBitArray(3).isNull();          // returns false
QBitArray(3).isEmpty();         // returns false

除isNull() 之外的所有函数都将空位阵列与空位数组视为等同;例如,QBitArray() 与 QBitArray(0) 的比较结果相等。我们建议您始终使用isEmpty(),并避免使用isNull()。

另请参阅 QByteArray 和QList 。

成员函数文档

[noexcept] QBitArray::QBitArray()

构建一个空位数组。

另请参阅 isEmpty()。

[explicit] QBitArray::QBitArray(qsizetype size, bool value = false)

构建一个包含size 个位的位数组。这些位初始化为value ,其默认值为false(0)。

[noexcept] QBitArray::QBitArray(const QBitArray &other)

构建other 的副本。

此操作耗时为常数时间,因为 QBitArray 是隐式共享的。这使得从函数中返回一个 QBitArray 非常快。如果修改了共享的实例,则会进行复制(写时复制),这需要线性时间。

另请参阅 operator=()。

[noexcept] QBitArray::QBitArray(QBitArray &&other)

通过“move”操作构造一个 QBitArray 实例,使其指向与other 原本指向的同一对象。

bool QBitArray::at(qsizetype i) const

返回索引位置i 处的位值。

i i 必须是位数组中的有效索引位置(即 0 <= < ())。size

另请参阅 operator[]()。

const char *QBitArray::bits() const

返回指向该QBitArray 的密集位数组的指针。位数从每个字节的最低有效位开始向上计数。最后一个字节中相关的位数由size() % 8 给出。

另请参阅 fromBits() 和size()。

void QBitArray::clear()

清除位数组的内容,使其变为空。

另请参阅 resize() 和isEmpty()。

void QBitArray::clearBit(qsizetype i)

将索引位置为i 的位设置为 0。

i i 必须是位数组中的有效索引位置(即 0 <= < ())。size

另请参见 setBit() 和toggleBit()。

qsizetype QBitArray::count() const

与size() 相同。

qsizetype QBitArray::count(bool on) const

如果 `on ` 为真,则该函数返回位数组中存储的 1 位的数量;否则返回 0 位的数量。

bool QBitArray::fill(bool value, qsizetype size = -1)

将位数组中的每个位设置为value ,成功时返回true;否则返回false 。如果size 不为-1(默认值),则会事先将位数组调整为size 的大小。

示例:

QBitArray ba(8);
ba.fill(true);
// ba: [ 1, 1, 1, 1, 1, 1, 1, 1 ]

ba.fill(false, 2);
// ba: [ 0, 0 ]

另请参阅 resize()。

void QBitArray::fill(bool value, qsizetype begin, qsizetype end)

将索引位置从begin 到end (不包括 )处的位设置为value 。

begin 必须是位数组中的有效索引位置(0 <=begin <size())。

end 必须是有效的索引位置,或者等于size();在后一种情况下,填充操作将运行至数组末尾(0 <=end <=size())。

示例:

QBitArray ba(4);
ba.fill(true, 1, 2);            // ba: [ 0, 1, 0, 0 ]
ba.fill(true, 1, 3);            // ba: [ 0, 1, 1, 0 ]
ba.fill(true, 1, 4);            // ba: [ 0, 1, 1, 1 ]

这是一个重载函数。

[static] QBitArray QBitArray::fromBits(const char *data, qsizetype size)

创建一个QBitArray ,其密集位数组位于data ,包含size 个位。位于data 的字节数组长度必须至少为size /8(向上取整)字节。

如果size 不是 8 的倍数,则该函数将包含data 中最后一个字节的size % 8 位。

另请参阅 bits()。

bool QBitArray::isEmpty() const

如果该位数组的大小为 0,则返回 `true `;否则返回 `false`。

另请参见 size()。

bool QBitArray::isNull() const

如果该位数组为空,则返回true ;否则返回false 。

示例:

QBitArray().isNull();           // returns true
QBitArray(0).isNull();          // returns false
QBitArray(3).isNull();          // returns false

出于历史原因,Qt 将空位图与空位图区分开来。对于大多数应用程序而言,关键在于位图是否包含任何数据,这可以通过isEmpty() 来判断。

另请参阅 isEmpty()。

void QBitArray::resize(qsizetype size)

将位数组调整为size 位。

如果size 大于当前大小,则将位数组扩展为size 位,并将额外位添加到末尾。新位被初始化为 false(0)。

如果size 小于当前大小,则从末尾删除相应数量的位。

另请参阅 size()。

void QBitArray::setBit(qsizetype i)

将索引位置为i 的位设置为 1。

i i 必须是位数组中的有效索引位置(即 0 <= < ())。size

另请参阅 clearBit() 和toggleBit()。

void QBitArray::setBit(qsizetype i, bool value)

将索引位置为i 的位设置为value 。

这是一个重载函数。

qsizetype QBitArray::size() const

返回位数组中存储的位数。

另请参阅 resize()。

[noexcept] void QBitArray::swap(QBitArray &other)

将该位数组与other 互换。此操作速度极快,且绝不会失败。

bool QBitArray::testBit(qsizetype i) const

如果索引位置i 处的位为 1,则返回true ;否则返回false 。

i 必须是位数组中的有效索引位置(即 0 <=i <size())。

另请参见 setBit() 和clearBit()。

[noexcept, since 6.0] quint32 QBitArray::toUInt32(QSysInfo::Endian endianness, bool *ok = nullptr) const

返回将位数组转换为整数的数组。 该转换基于endianness 。将数组的前 32 位转换为quint32 并返回,同时遵循endianness 。如果ok 不是空指针,且数组超过 32 位,则ok 被设置为 false,且本函数返回零;否则,将其设置为 true。

该函数在 Qt 6.0 中引入。

bool QBitArray::toggleBit(qsizetype i)

将索引位置为i 的位值进行反转,并返回该位的先前值:若先前已设置,则返回true;若先前未设置,则返回false。

如果先前值为 0,则新值为 1;如果先前值为 1,则新值为 0。

i i 必须是位数组中的有效索引位置(即 0 <= < ())。size

另请参阅 setBit() 和clearBit()。

void QBitArray::truncate(qsizetype pos)

截断索引位置为pos 处的位数组。

如果 `pos ` 超出数组末尾,则不执行任何操作。

另请参阅 resize()。

QBitArray &QBitArray::operator&=(QBitArray &&other)

QBitArray &QBitArray::operator&=(const QBitArray &other)

对该位数组中的所有位与other 进行“与”运算。将结果赋值给该位数组,并返回对其的引用。

结果的长度为两个位数组中最长的一个,若其中一个数组较短,则缺失的位将被视为 0。

示例:

QBitArray a(3);
QBitArray b(2);
a[0] = 1; a[1] = 0; a[2] = 1;   // a: [ 1, 0, 1 ]
b[0] = 1; b[1] = 1;             // b: [ 1, 1 ]
a &= b;                         // a: [ 1, 0, 0 ]

另请参阅 operator&()、operator|=()、operator^=() 以及operator~()。

[noexcept] QBitArray &QBitArray::operator=(QBitArray &&other)

将other 移动到该位数组中,并返回该位数组的引用。

[noexcept] QBitArray &QBitArray::operator=(const QBitArray &other)

将other 赋值给此位数组,并返回对此位数组的引用。

QBitRef QBitArray::operator[](qsizetype i)

返回索引位置i 处的位,作为可修改的引用。

i i 必须是位数组中的有效索引位置(即 0 <= < ())。size

示例:

QBitArray a(3);
a[0] = false;
a[1] = true;
a[2] = a[0] ^ a[1];

返回值的类型为 QBitRef,这是QBitArray 的辅助类。当您获得一个 QBitRef 类型的对象时,可以对其进行赋值,该赋值将作用于您从中获取引用时的QBitArray 中的该位。

函数testBit()、setBit() 和clearBit() 的执行速度略快。

另请参阅 at()、testBit()、setBit() 以及clearBit()。

bool QBitArray::operator[](qsizetype i) const

这是一个重载函数。

QBitArray &QBitArray::operator^=(QBitArray &&other)

QBitArray &QBitArray::operator^=(const QBitArray &other)

对该位数组中的所有位与other 进行异或(XOR)运算。将结果赋值给该位数组,并返回对其的引用。

结果的长度等于两个位数组中较长的一个,若有缺失的位(当一个数组比另一个短时),则将其视为 0。

示例:

QBitArray a(3);
QBitArray b(2);
a[0] = 1; a[1] = 0; a[2] = 1;   // a: [ 1, 0, 1 ]
b[0] = 1; b[1] = 1;             // b: [ 1, 1 ]
a ^= b;                         // a: [ 0, 1, 1 ]

另请参阅 operator^()、operator&=()、operator|=() 以及operator~()。

QBitArray &QBitArray::operator|=(QBitArray &&other)

QBitArray &QBitArray::operator|=(const QBitArray &other)

对该位数组中的所有位与other 进行或(OR)运算。将结果赋值给该位数组,并返回对其的引用。

结果的长度等于两个位数组中较长的一个,若有缺失的位(当其中一个数组比另一个短时),则将其视为 0。

示例:

QBitArray a(3);
QBitArray b(2);
a[0] = 1; a[1] = 0; a[2] = 1;   // a: [ 1, 0, 1 ]
b[0] = 1; b[1] = 1;             // b: [ 1, 1 ]
a |= b;                         // a: [ 1, 1, 1 ]

另请参阅 operator|()、operator&=()、operator^=() 以及operator~()。

相关的非成员函数

[noexcept] bool operator!=(const QBitArray &lhs, const QBitArray &rhs)

如果lhs 不等于rhs 位数组,则返回true ;否则返回false 。

另请参阅 operator==()。

QBitArray operator&(QBitArray &&a1, QBitArray &&a2)

QBitArray operator&(QBitArray &&a1, const QBitArray &a2)

QBitArray operator&(const QBitArray &a1, QBitArray &&a2)

QBitArray operator&(const QBitArray &a1, const QBitArray &a2)

返回一个位数组,该数组是位数组a1 和a2 的与运算结果。

结果的长度等于这两个位数组中较长的一个,若其中一个数组较短,则缺失的位将被视为 0。

示例:

QBitArray a(3);
QBitArray b(2);
QBitArray c;
a[0] = 1; a[1] = 0; a[2] = 1;   // a: [ 1, 0, 1 ]
b[0] = 1; b[1] = 1;             // b: [ 1, 1 ]
c = a & b;                      // c: [ 1, 0, 0 ]

另请参见 operator&=()、operator|() 和operator^()。

QDataStream &operator<<(QDataStream &out, const QBitArray &ba)

将位数组ba 写入流out 。

另请参阅 QDataStream 运算符的格式。

[noexcept] bool operator==(const QBitArray &lhs, const QBitArray &rhs)

如果lhs 等于rhs 位数组,则返回true ;否则返回false 。

另请参阅 operator!=()。

QDataStream &operator>>(QDataStream &in, QBitArray &ba)

从流in 将位数组读入ba 。

另请参阅 QDataStream 运算符的格式。

QBitArray operator^(QBitArray &&a1, QBitArray &&a2)

QBitArray operator^(QBitArray &&a1, const QBitArray &a2)

QBitArray operator^(const QBitArray &a1, QBitArray &&a2)

QBitArray operator^(const QBitArray &a1, const QBitArray &a2)

返回一个位数组,该数组是位数组a1 和a2 的异或(XOR)结果。

结果的长度等于这两个位数组中较长的一个,若其中一个数组较短,则缺失的位被视为 0。

示例:

QBitArray a(3);
QBitArray b(2);
QBitArray c;
a[0] = 1; a[1] = 0; a[2] = 1;   // a: [ 1, 0, 1 ]
b[0] = 1; b[1] = 1;             // b: [ 1, 1 ]
c = a ^ b;                      // c: [ 0, 1, 1 ]

另请参阅 operator^=() 。

QBitArray operator|(QBitArray &&a1, QBitArray &&a2)

QBitArray operator|(QBitArray &&a1, const QBitArray &a2)

QBitArray operator|(const QBitArray &a1, QBitArray &&a2)

QBitArray operator|(const QBitArray &a1, const QBitArray &a2)

返回一个位数组,该数组是位数组a1 和a2 的按位或运算结果。

结果的长度等于这两个位数组中较长的一个,若有缺失的位(当其中一个数组比另一个短时),则将其视为 0。

示例:

QBitArray a(3);
QBitArray b(2);
QBitArray c;
a[0] = 1; a[1] = 0; a[2] = 1;   // a: [ 1, 0, 1 ]
b[0] = 1; b[1] = 1;             // b: [ 1, 1 ]
c = a | b;                      // c: [ 1, 1, 1 ]

另请参阅 QBitArray::operator|=()、operator&() 和operator^()。

QBitArray operator~(QBitArray a)

返回一个位数组,其中包含位数组a 的补码。

示例:

QBitArray a(3);
QBitArray b;
a[0] = 1; a[1] = 0; a[2] = 1;   // a: [ 1, 0, 1 ]
b = ~a;                         // b: [ 0, 1, 0 ]

另请参阅 operator&()、operator|() 和operator^()。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.