【问题标题】:I am not really sure what this code does (bit manipulation)我不太确定这段代码的作用(位操作)
【发布时间】:2020-05-16 11:44:38
【问题描述】:

我写了一些我现在正在单元测试的代码,为此我在互联网的帮助下制作了下面的代码。

//shows changed bit
    //0010 0101 XOR 0010 0111 = 0000 0010 
    uint8_t XOR = value ^ result;

    int count;
    //count amount of 1's in XOR
    for (count = 0; XOR; XOR >>= 1)
    {
        count += XOR & 1;
    }

Value 是原始值,result 是该值,但切换了 ONE 位。

我只是想确保我理解正确,但如果我错了,请纠正我。

for 循环中的第二条语句“XOR;”我认为它所做的是在 XOR 不为 0 时运行 for 循环。XOR >>= 1 是它设置为自身,但 1 向右移动了一位。

只要最后一个位置有 1,计数就会 +1 吗?

这就是我所做的。

【问题讨论】:

  • 你是对的。它正在计算 XOR 中 1 的位数。

标签: c bit-manipulation bit-shift


【解决方案1】:

如果你这样做

  r = a xor b

并且ab 相比只有一位切换,r 将始终在1 具有该位,所有其他位在0

所以count 将永远给1

当 LSb(右侧第 0 位)为 1 时,for 循环向 count 加一。然后XOR 右移,所有位从左向右移动,位 0 取位 1 的值等。MSb(位 7)取值0XOR 是无符号的,所以如果MSb 最初是1)。

因此,最终XOR 将变为0,并且循环将停止。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    • 2018-09-10
    • 2010-11-06
    相关资源
    最近更新 更多