由位组成的整数到布尔数组,这是c++中最有效的方式

integer to boolean array made of bits, most efficient way in c++?

本文关键字:这是 c++ 方式 有效 布尔 整数 数组      更新时间:2023-10-16

我有一个有趣的小问题,我知道有多种方法来剥猫的皮,但我想知道最好/最有效的方法是什么。

例如,我有一个值为534的整数和一个可以存储16个布尔值的数组

现在,534到二进制是10000010110

从534到

的最佳方式是什么?
array[0] = 0
array[1] = 1
array[2] = 1
array[3] = 0
array[4] = 1
....
array[15] = 0

提前感谢!

使用std::bitset<16>并调用operator[]访问单个位:

#include <iostream>
#include <bitset>
int main()
{
     std::bitset<16> bits(534);
     std::cout << bits << std::endl;
     //use operator[] to access individual bits
     std::cout << bits[2] << std::endl; 
}
输出(演示):

0000001000010110
1

这可能不是最有效的,但如果您考虑安全性,那么它是原始数组类型的更好选择。效率差异几乎可以忽略不计。

如果在编译时不知道比特数,而在运行时可以知道,那么boost::dynamic_bitset将帮助您。看看吧:

  • dynamic_bitset

从它的文档

dynamic_bitset类表示一组位。它提供了通过操作符[]访问单个位的值,并提供了可以应用于内置整数的所有位操作符,例如operator&和operator<& lt;。在运行时通过dynamic_bitset的构造函数的形参指定集合中的位数。

dynamic_bitset类与std::bitset类几乎相同。不同之处在于,dynamic_bitset的大小(位的数目)是在运行时构造dynamic_bitset对象时指定的,而std::bitset的大小是在编译时通过整型模板形参指定的。

像这样:

for (unsigned int i = 0; i != 16; ++i)
{
  array[i] = n & 1;
  n /= 2;
}