我不太确定这段代码的作用(位操作)
I am not really sure what this code does (bit manipulation)
我写了一些我现在正在单元测试的代码,为此我在互联网的帮助下制作了下面的代码。
//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 循环中的第二条语句 "XOR;" 我认为它所做的是 运行 for 循环,而 XOR 不是 0。而 XOR >>= 1 是它设置为它自己,但 1 向右移动了一位。
只要最后一个位置上有 1,计数就会 +1?
这就是我从中得出的结论。
如果你这样做
r = a xor b
与 b
相比, 和 a
只有一个位被切换,r
将在 1
处有那个位,始终,所有其他位在 0
.
所以count
总是会给出1
.
当 LSb(位 0,右侧)为 1
时,for
循环向 count
添加 1。然后 XOR
右移,所有位从左到右,第 0 位取第 1 位的值等。MSb(第 7 位)取值 0
(XOR
是无符号的,所以如果 MSb 最初是 1
也没问题)。
因此,最终 XOR
将是 0
,循环将停止。
我写了一些我现在正在单元测试的代码,为此我在互联网的帮助下制作了下面的代码。
//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 循环中的第二条语句 "XOR;" 我认为它所做的是 运行 for 循环,而 XOR 不是 0。而 XOR >>= 1 是它设置为它自己,但 1 向右移动了一位。
只要最后一个位置上有 1,计数就会 +1?
这就是我从中得出的结论。
如果你这样做
r = a xor b
与 b
相比, 和 a
只有一个位被切换,r
将在 1
处有那个位,始终,所有其他位在 0
.
所以count
总是会给出1
.
当 LSb(位 0,右侧)为 1
时,for
循环向 count
添加 1。然后 XOR
右移,所有位从左到右,第 0 位取第 1 位的值等。MSb(第 7 位)取值 0
(XOR
是无符号的,所以如果 MSb 最初是 1
也没问题)。
因此,最终 XOR
将是 0
,循环将停止。