C++中将整数转换为位布尔数组,最有效的方法是什么?

3

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

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

现在,534的二进制表示是10000010110

最好的方法是如何从534到

array[0] = 0
array[1] = 1
array[2] = 1
array[3] = 0
array[4] = 1
....
array[15] = 0

感谢您的提前帮助!

1
还有这个要看看:https://dev59.com/cW855IYBdhLWcg3ww3Wa - FailedDev
2个回答

14

使用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类表示一组位。它通过operator []提供对单个位的值的访问,并提供所有可应用于内置整数的按位操作符,例如operator&和operator<<。集合中的位数是通过动态位集的构造函数参数在运行时指定的。

dynamic_bitset类与std :: bitset类几乎相同。区别在于,动态位集的大小(位数)在动态位集对象的构造期间通过参数指定,而std :: bitset的大小是通过整数模板参数在编译时指定的。


4

像这样:

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

我会说那非常高效。 - RandomInsano

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接