[英]Bit operators C++
有人可以向我解释这个功能是如何工作的吗? 我明白第 5 行的x
部分的最低集合,但我不明白分配result ^= 1;
在决定一个单词的奇偶校验时,结果不应该是计算 0 和 1 吗?
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
s 一样多的次数。 它会相应地翻转result
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.