我不太清楚这段代码是做什么的(位操作)。

问题描述 投票:0回答:1

我写了一些代码,我现在正在进行单元测试,为此我在网上的帮助下做了下面的代码。

//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是值,但有一个位被切换。

我只是想确定我的理解是否正确,如果我错了,请纠正我。

for循环中的第2条语句 "XOR; "我认为它的作用是在XOR不是0的时候运行for循环。而XOR >>=1是它设置为自己,但把1向右移一位。

而且只要最后一个位置上有1,计数就会做+1 ?

这是我对它的理解。

c bit-manipulation bit-shift
1个回答
1
投票

如果你做

  r = a xor b

a 相比之下,只有一个位子被拨动 b, r 会有那一点 1始终,所有其他位在 0.

所以... count 不离不弃 1.

for 循环中增加一个 count 当LSb(位0,右侧)是 1. 那么 XOR 是右移的,所有位从左到右,位0取位1的值,等等。MSb(位7)取值为 0 (XOR 是无符号的,所以如果MSb是无符号的,就没有问题。1 最初)。)

因此,最终 XOR 将是 0 循环就会停止。

© www.soinside.com 2019 - 2024. All rights reserved.