位运算符 C++
Bit operators C++
有人可以向我解释一下这个功能是如何工作的吗?我理解丢掉第 5 行的 x
部分的最低位集合,但我不理解分配 result ^= 1;
Shouldn't result be counting 0 and 1 when deciding parity of a word ?
short Parity_of_word(unsigned long long x) {
short result = 0;
while(x) {
result ^= 1;
x &= (x-1);
}
return result;
}
result ^= 1;
在 0 和 1 之间反复变化 result
。所以,问题是:这要完成多少次?
x&=(x-1);
是一种“从 x 中删除最后一位”的 hacky 方法。要看到它,假设 x 是
0101000110
删除一个将成为:
0101000101
(最后的0全部变成1,第一个1变成0)。一旦 and
两个值加在一起:
0101000100
多田少一1
。因此,while 循环将执行与 x
中的 1
一样多的次数。它会相应地翻转 result
。
有人可以向我解释一下这个功能是如何工作的吗?我理解丢掉第 5 行的 x
部分的最低位集合,但我不理解分配 result ^= 1;
Shouldn't result be counting 0 and 1 when deciding parity of a word ?
short Parity_of_word(unsigned long long x) {
short result = 0;
while(x) {
result ^= 1;
x &= (x-1);
}
return result;
}
result ^= 1;
在 0 和 1 之间反复变化 result
。所以,问题是:这要完成多少次?
x&=(x-1);
是一种“从 x 中删除最后一位”的 hacky 方法。要看到它,假设 x 是
0101000110
删除一个将成为:
0101000101
(最后的0全部变成1,第一个1变成0)。一旦 and
两个值加在一起:
0101000100
多田少一1
。因此,while 循环将执行与 x
中的 1
一样多的次数。它会相应地翻转 result
。