gpt4 book ai didi

bit-manipulation - 如何解交织位(UnMortonizing?)

转载 作者:行者123 更新时间:2023-12-03 11:19:59 25 4
gpt4 key购买 nike

从 32 位 int 中解交织位的最有效方法是什么?对于这种特殊情况,我只关心奇数位,尽管我确信将任何解决方案推广到两组都很简单。

例如,我想转换 0b01000101进入 0b1011 .最快的方法是什么?

编辑:

在这个应用程序中,我可以保证偶数位都是零。我可以利用这一事实来提高速度或减少空间吗?

最佳答案

鉴于您知道应用程序中的其他位均为 0,您可以这样做:

x = (x | (x >> 1)) & 0x33333333;
x = (x | (x >> 2)) & 0x0f0f0f0f;
x = (x | (x >> 4)) & 0x00ff00ff;
x = (x | (x >> 8)) & 0x0000ffff;

第一步看起来像这样:
  0a0b0c0d0e0f0g0h0i0j0k0l0m0n0o0p   x
| 00a0b0c0d0e0f0g0h0i0j0k0l0m0n0o0 x >> 1
--------------------------------
= 0aabbccddeeffgghhiijjkkllmmnnoop x | (x >> 1)
& 00110011001100110011001100110011 0x33333333
--------------------------------
= 00ab00cd00ef00gh00ij00kl00mn00op (x | (x >> 1)) & 0x33333333

然后第二步一次处理两个位,依此类推。

关于bit-manipulation - 如何解交织位(UnMortonizing?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3137266/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com