由位组成的整数到布尔数组,这是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
从它的文档
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;
}
相关文章:
- 使用递归的数组的最小值.这是怎么回事
- 我不小心调用了一个没有自己类对象的成员函数.但这是怎么回事呢
- 这是我尝试让用户将值输入到数组中.然后将其隐藏为大量的星号
- 这是实现图形的坏方法吗
- 当基类是依赖类型时,这是一个缺陷吗
- 当C++中需要自动删除时,这是静态的正确用法吗?
- 这是关于成员访问规则的正确摘要吗
- 这是插入排序的正确实现吗?
- 我使用 OpenMP 的线程越多,执行时间就越长,这是怎么回事?
- 如何在OpenCV中检测这是谁的脸?
- 这是使用回溯的 nqueen 问题,但我使用了动态 2d 数组,我的程序编译良好,但不返回任何输出
- 在 Python 和 c++ 2d 数组初始化之间.这是怎麽?为什么呢?
- 验证openssl c++中的签名,这是由JAVA DSA签名的?
- 这是GoogleTest AssertionResult中的错误吗?
- 在编译时,C++项目抛出错误 C2228,这是预期的,因为控件在运行时未达到该点
- 这是 basic.def.odr 部分的缺陷吗?
- 被覆盖的函数不会反映在基类中,这是正常行为吗?
- MSVC 无法根据模板参数进行数学运算,这是一个错误吗?
- 这是 ubuntu 16.04 中的 gdb 错误吗?
- 你如何理解"std: :forward is just syntactic sugar"?这是真的吗?