繁体   English   中英

整数到布尔数组由位组成,是c ++中最有效的方法吗?

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

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

比方说,我有一个值为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类表示一组位。 它通过operator []提供对各个位值的访问,并提供可以应用于内置整数的所有按位运算符,例如operator&和operator <<。 集合中的位数在运行时通过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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM