<分区>
因此,如果我有一个整数,例如 0000100101101001
,它应该被转换为一个数组,如 {0,3,5,6,8,11}
。我现在正在使用一个使用 clz(计算前导零)和位掩码的复杂系统来执行此操作,但我怀疑应该存在更好的东西。
我在 i7 上使用 gcc,使用 SIMD/SSE 内置被认为是一件好事。
<分区>
因此,如果我有一个整数,例如 0000100101101001
,它应该被转换为一个数组,如 {0,3,5,6,8,11}
。我现在正在使用一个使用 clz(计算前导零)和位掩码的复杂系统来执行此操作,但我怀疑应该存在更好的东西。
我在 i7 上使用 gcc,使用 SIMD/SSE 内置被认为是一件好事。
最佳答案
这个怎么样(应该适用于无符号整数):
while (x) {
/* Store rightmost 1-bit in your array. */
arr[i++] = x & (-x);
/* Turn off rightmost 1-bit. */
x = x & (x - 1);
}
我怀疑有更好的方法。
关于将 Int 转换为指示 C 中位位置的 Int 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7702699/