QBitArray Class

QBitArray 类提供了一个比特数组。更多

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

该类可等价比较

注意:该类中的所有函数都是可重入的

公共函数

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 )。它使用隐式共享(写时复制)来减少内存使用量,避免不必要的数据复制。

下面的代码构造了一个 QBitArray,其中包含初始化为 false (0) 的 200 个比特:

QBitArray ba(200);

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

QBitArray 使用基于 0 的索引,就像 C++ 数组一样。要访问特定索引位置的位,可以使用 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()。

另请参阅 QByteArrayQList

成员函数文档

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

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

执行该位数组中所有位与other 之间的 AND 运算。将结果赋值给这个比特数组,并返回对它的引用。

结果的长度是两个比特数组中最长的一个的长度,任何缺失的比特(如果一个比特数组比另一个短)都被视为 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~()。

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~()。

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~()。

[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 必须是比特数组中的有效索引位置(即 0 <= < () )。i 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 必须是比特数组中的有效索引位置(即 0 <= < () )。i size

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

qsizetype QBitArray::count() const

size() 相同。

qsizetype QBitArray::count(bool on) const

如果on 为 true,则返回比特数组中存储的 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 必须是一个有效的索引位置或等于 () ,在这种情况下,填充操作一直运行到数组的末尾(0 <= <= () )。size 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 ,位数为sizedata 的字节数组长度必须至少为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 必须是位数组中的有效索引位置(即 0 <= < () )。i 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

返回转换为 int 的比特数组。转换基于endianness 。最多将数组的前 32 位转换为quint32 并返回,同时遵守endianness 。如果ok 不是空指针,且数组的位数超过 32 位,则ok 设置为 false,此函数返回 0;否则,设置为 true。

此函数在 Qt 6.0 中引入。

bool QBitArray::toggleBit(qsizetype i)

替换索引位置i 上的位值,返回该位之前的值为真(如果已设置)或假(如果未设置)。

如果之前的值为 0,则新值为 1。如果之前的值为 1,则新值为 0。

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

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

void QBitArray::truncate(qsizetype pos)

在索引位置pos 处截断比特数组。

如果pos 超过了数组的末尾,则不会发生任何操作。

另请参见 resize().

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

other 移至该位数组,并返回该位数组的引用。

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

other 赋值给该位数组,并返回该位数组的引用。

QBitRef QBitArray::operator[](qsizetype i)

以可修改引用的形式返回位于i 索引位置的位。

i 必须是比特数组中的有效索引位置(即 0 <= < () )。i 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 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)

返回一个比特数组,它是a1a2 的 AND。

结果的长度是两个比特数组中最长的一个,任何缺失的比特(如果一个比特数组比另一个短)都取 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^()。

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)

返回比特数组a1a2 的 OR。

结果的长度是两个比特数组中最长的一个,任何缺失的比特(如果一个比特数组比另一个短)都取 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 &&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)

返回一个比特数组,它是比特数组a1a2 的 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^=(),operator&(), 和operator|()

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

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

另请参阅 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 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^()。

© 2025 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.