繁体   English   中英

位运算符 C++

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM