从32位int解交织比特的最有效方法是什么?对于这种特殊情况,我只关注奇数位,尽管我确信将两个集合的任何解决方案概括为简单.
例如,我想转换0b01000101成0b1011.什么是最快的方式?
编辑:
在这个应用程序中,我可以保证偶数位都是零.我可以利用这个事实来提高速度或减少空间吗?
我正在尝试将8位值复制到32位,并想问问是否有可能编写单行算法来复制位值。
例如:
1100 1011 -> 1111 1111 0000 0000 1111 0000 1111 1111
Run Code Online (Sandbox Code Playgroud)
如果有可能,我想了解其背后的逻辑。
我在64位寄存器的低位部分有一个32位值;顶部部分是 0。让我们X用信息来表示一个位,并用从 LSB 到 MSB 列出的位来表示,如下所示:
X X X ... X 0 0 0 0 ... 0
Run Code Online (Sandbox Code Playgroud)
现在,我想用信息“间隔”这些位,这样我就有了
X 0 X 0 X 0 ... X 0
Run Code Online (Sandbox Code Playgroud)
(或者如果你想把 0 放在前面,那么
0 X 0 X 0 X 0 ... X
Run Code Online (Sandbox Code Playgroud)
也很好。)
有什么快速的方法可以做到这一点?
与多 CPU 架构相关的答案会很好,但特定于 Intel x86_64 和/或 nVIDIA Pascal SM 的答案将是最相关的。