【发布时间】:2018-07-06 13:37:07
【问题描述】:
目标是将std::uint64_t(用作位掩码)转换为std::array<bool>。
这个问题类似于 C# 问题How can I convert an int to an array of bool?,但是对于 C++,我正在寻找具有最佳性能的算法。
给定一个用作位掩码的std::uint64_t,我知道可以按位循环其内容并进行位比较,将值设置为std::array<bool> 中相同位置的值。
但在全能的 C++ 中,必须是一种更有效的方式!也许一些肮脏的演员表,mallocs或诸如此类的东西?一切都好;我在 Windows / GCC 上,所以即使是 GCC-only 功能也是完全允许的。
【问题讨论】:
-
...内联asm也可以
-
你真的需要
std::array<bool>吗?您可以将位掩码转换为std::bitset以随机访问各个位。 -
@NathanOliver 听起来不错,但很无聊
-
假设您的系统上的布尔值是什么,那么没有任何类型可以将您从 64 位转换为 64 字节。 bitset 可能是更好的方法。您是否正在尝试解决某个特定问题?在我看来,最好的性能是保留 uint64_t 并在需要时提取所需的位。
-
如果您的目标是 x86,您可以使用一些向量指令 (AVX?) 将单词的一部分存储到不同的目标中。不确定其他 ISA。
标签: c++ arrays performance gcc stdarray