我写了一些代码,我现在正在进行单元测试,为此我在网上的帮助下做了下面的代码。
//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 ?
这是我对它的理解。
如果你做
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
循环就会停止。