将 Int 转换为指示 C 中位位置的 Int 数组

标签 c bit-manipulation built-in

<分区>

因此,如果我有一个整数,例如 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/

相关文章:

c - 确定一个数字是否可以表示为 n 位整数(二进制补码)

c - 强制两个无符号字符合并

Java 位操作 - (num >>= 1) 做什么?

c - 如何检查我的字节标志,验证特定位是 1 还是 0?

python - 在 Python 中重新加载内置函数

c - 合并两个链表

c - pow(x,y) 适用于 float 但不适用于整数

c - 为什么 malloc 在我的 C 程序中不起作用?

c - 使 gcc/clang 将函数识别为内置函数

python - 如何了解更多内置模块