位运算符 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