objective-c中的比特交织

时间:2011-03-21 15:28:39

标签: objective-c c bit-manipulation

我想了解什么是比特交织。 我有一个例子:

a: 011
b: 101
---
c: 100111

据我所知,数字“a”的位在结果中的对位置上,而数字“b”的位在损伤位置上。 但为什么交错从数字“b”开始?有人知道这个规则吗?

我将在objective-c中编写规则,因此非常欢迎任何与此语言相关的优化。

谢谢!

1 个答案:

答案 0 :(得分:0)

我找到了它!

long x = 3;   // Interleave bits of x and y, so that all of the
long y = 5;   // bits of x are in the even positions and y in the odd;
long long z = 0; // z gets the resulting Morton Number.

for (int i = 0; i < sizeof(x) * CHAR_BIT; i++) {
    z |= (x & 1U << i) << i | (y & 1U << i) << (i + 1);
}

此代码执行位交错。如你所见,结果是一个莫顿数。 我希望这会对某人有所帮助! :)