我有一个有趣的小问题,我知道有多种方法可以给猫皮肤,但我想知道最好/最有效的方法是什么。
比如说我有一个值为534的整数和一个可以存储16个布尔值的数组
现在,534到二进制是10000010110
如何才能成为从534到
的最佳方式array[0] = 0
array[1] = 1
array[2] = 1
array[3] = 0
array[4] = 1
....
array[15] = 0
提前感谢!
答案 0 :(得分:13)
使用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;
}
输出(demo):
0000001000010110
1
这可能不是大多数效率,但如果您考虑安全,那么它是原始数组类型的更好替代方案。效率差异几乎可以忽略不计。
如果在编译时未知位数,并且可以在运行时知道,那么boost::dynamic_bitset
将对您有所帮助。看看吧:
来自doc,
dynamic_bitset类表示一组位。它通过运算符[]提供对各个位的值的访问,并提供可以应用于内置整数的所有按位运算符,例如运算符和运算符。和运算符&lt;&lt;集合中的位数在运行时通过dynamic_bitset的构造函数的参数指定。
dynamic_bitset类与std :: bitset类几乎相同。不同之处在于dynamic_bitset的大小(位数)是在构造dynamic_bitset对象期间的运行时指定的,而std :: bitset的大小是在编译时通过整数模板参数指定的。
答案 1 :(得分:2)
像这样:
for (unsigned int i = 0; i != 16; ++i)
{
array[i] = n & 1;
n /= 2;
}