c - 循环通过位 C

标签 c bit-manipulation bit

我正在尝试遍历无符号字符的位,但我不确定从哪里开始,最终,我将对这些位执行其他按位运算,例如 ~ 和 xor.. 等。

最佳答案

可以通过多种方式循环位:

  • 你可以做一个破坏性循环,当你移动值时,测试初始位或最后一位,这取决于你想枚举位的顺序,或者
  • 当您使用按位 AND 测试带有一位掩码的数字时,您可以执行非破坏性循环,该数字由左移 1 产生。 .

  • 以下是第一种方法的示例:
    unsigned int bits = ...;
    while (bits) {
        if (bits & 1) {
            // Current bit is set to 1
        } else {
            // Current bit is set to 0
        }
        bits >>= 1;
    }
    

    如果您想在达到零后继续处理位,请制作一个单独的计数器。

    以下是第二种方法的示例:
    unsigned int bits = ...;
    for (int pos = 0 ; pos != 16 ; pos++) {
        if (bits & (1 << pos)) {
            // Current bit is set to 1
        } else {
            // Current bit is set to 0
        }
    }
    

    关于c - 循环通过位 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33005271/

    相关文章:

    c - 优化辅助函数

    c++ - 如何在 C++ 中创建一个 Bitset 数组

    Python - 十进制到十六进制,反转字节顺序,十六进制到十进制

    c++ - 在 C++ 中设置单个位

    algorithm - 使用按位反转位

    c - 在很小的内存中表示非常大的位数组

    c - 如何返回中间位?

    c++ - CFI 指令是什么意思? (还有一些问题)

    凯撒加密(段错误)

    c - 为什么我总是收到无效的反馈?