相关疑难解决方法(0)

有效地交织比特

我需要做出uint64_t2个uint32_t交错的比特:如果A=a0a1a2...a31B=b0b1...b31,我需要C = a0b0a1b1...a31b31.有没有办法有效地做到这一点?到目前为止,我只有一个for循环的32次迭代的天真方法,每次迭代都有C|=((A&(1<<i))<<i)|((B&(1<<i))<<(i+1)).

我想应该有一些数学技巧,例如将A和B乘以一些特殊数字,这导致在得到的64位数字中将它们的位与零交错,这样只剩下or这些产品.但我找不到这样的乘数.

另一种可能的方法是编译器内部或汇编指令,但我不知道.

c++ algorithm math assembly bit-manipulation

10
推荐指数
2
解决办法
1532
查看次数

标签 统计

algorithm ×1

assembly ×1

bit-manipulation ×1

c++ ×1

math ×1