【问题标题】:integer to boolean array made of bits, most efficient way in c++?整数到由位组成的布尔数组,C++ 中最有效的方法?
【发布时间】:2011-12-10 17:18:32
【问题描述】:

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

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

现在,534 到二进制是 10000010110

从 534 到 534 的最佳方式是什么

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

提前致谢!

【问题讨论】:

标签: c++ c binary


【解决方案1】:

使用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 类表示一组位。它通过 operator[] 提供对单个位值的访问,并提供可以应用于内置整数的所有按位运算符,例如 operator& 和 operator

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

【讨论】:

    【解决方案2】:

    像这样:

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

    【讨论】:

    • 我会说这非常有效。
    猜你喜欢
    • 1970-01-01
    • 2023-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多