C++ 库 - <bit>



C++ 中的<bit> 头文件提供了多个用于位操作和按位运算的函数,这些函数对于底层编程任务至关重要。包括用于计数位、查找最高/最低设置位等的函数。此头文件是数值库的一部分。

包含 <bit> 头文件

要在 C++ 程序中包含 <bit> 头文件,可以使用以下语法。

#include <bit>

<bit> 头文件的函数

以下是 <bit> 头文件中所有函数的列表。

类型转换和字节操作

在 C++ 中,类型转换和字节操作函数处理在字节级别的数据类型表示。数据的二进制表示对于数据序列化和性能优化至关重要。

序号 函数和描述
1 bit_cast

此函数将一种类型的对象表示重新解释为另一种类型的对象表示。

2 byteswap

此函数反转给定整数值中的字节。

Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.

手动实现 byteswap

在下面的示例中,我们将手动实现 byteswap。

Open Compiler
#include <bit> #include <iostream> uint16_t manual_byteswap(uint16_t value) { return (value >> 8) | (value << 8); } int main() { uint16_t value = 0x1234; uint16_t swapped = manual_byteswap(value); std::cout << std::hex << swapped; return 0; }

输出

如果我们运行上面的代码,它将生成以下输出:

3412

二次幂运算

通过使用这些运算,我们可以检查一个数是否为 2 的幂,或者找到最接近的 2 的幂,可以优化内存分配或按位运算。

序号 函数和描述
1 has_single_bit

此函数检查一个数是否是 2 的整数幂。

2 bit_ceil

此函数查找大于或等于给定值的最小 2 的整数幂。

3 bit_floor

此函数查找小于或等于给定值的最大的 2 的整数幂。

4 bit_width

此函数查找表示给定值所需的最少位数。

查找最小幂

在下面的示例中,我们将使用 bit_ceil 查找 2 的最小幂。

#include <bit> #include <iostream> int main() { uint32_t value = 10; uint32_t ceil_value = std::bit_ceil(value); std::cout << ceil_value; return 0; }

输出

如果我们运行上面的代码,它将生成以下输出:

16

按位旋转

按位旋转涉及将数字的位向左或向右移动。这些旋转通常用于加密算法、哈希函数和底层优化。

序号 函数和描述
1 rotl

此函数计算按位左旋转的结果。

2 rotr

此函数计算按位右旋转的结果。

旋转位

在下面的示例中,我们将使用 rotl 将数字的位向左旋转。

Open Compiler
#include <bitset> #include <bit> #include <iostream> uint8_t manual_rotl(uint8_t value, int shift) { return (value << shift) | (value >> (8 - shift)); } int main() { uint8_t value = 0b10110001; uint8_t rotated = manual_rotl(value, 2); std::cout << std::bitset<8>(rotated); return 0; }

输出

如果我们运行上面的代码,它将生成以下输出:

11000110

位计数

位计数函数用于计算连续位(0 或 1)或设置为 1 的总位数。这些操作主要用于底层编程,其中有效地操作单个位可以显着优化性能。

序号 函数和描述
1 countl_zero

此函数计算从最高有效位开始的连续 0 位数。

2 countl_one

此函数计算从最高有效位开始的连续 1 位数。

3 countr_zero

此函数计算从最低有效位开始的连续 0 位数。

4 countr_one

此函数计算从最低有效位开始的连续 1 位数。

5 popcount

此函数计算无符号整数中 1 的位数。

手动计数位

在下面的示例中,我们将使用 popcount 来计算数字中设置为 1 的位数。

Open Compiler
#include <bit> #include <iostream> uint32_t manual_popcount(uint32_t value) { uint32_t count = 0; while (value) { count += value & 1; value >>= 1; } return count; } int main() { uint32_t value = 0b10110001; uint32_t count = manual_popcount(value); std::cout << "Number of 1s: " << count; return 0; }

输出

如果我们运行上面的代码,它将生成以下输出:

Number of 1s: 4
广告