位运算-异或运算

1.性质


对于第五条进行解释, 可以看到如下例子, 四者异或运算结果位0(有1的位都出现了两次), 而 *i 也只是将位进行平移而已, 并不影响异或结果
011
010
001
000

2.补充

2.1 \(x \& (x-1)\) 去除最低位1

举例:
\(x = a10000;\) (a为高位部分)
\(x - 1 = a01111;\)
\(x \& (x-1) = a00000\)
这样就去除最低位1了

2.2 \(x\oplus(-x)\) 取最低位1

举例:
\(x = a10000;\) (a为高位部分)
\(-x = \bar{a} 10000;\) (取反加1, 01111 + 1 = 10000)
\(x\oplus(-x) = 010000\) 则只剩下最低位1了!

2.3 函数 sumXor\((x)\),表示 0\(\oplus1\oplus2\oplus\cdots\oplus x\)

因为以 4\(i\)为开头的连续四个整数异或的结果为 0(参考性质5),
所以 sumXor\((x)\)可以被表示为:
\(\begin{aligned} \text{sumXor}(x) &= \begin{cases}x, &x=4k,k\in Z\\(x-1)\oplus x, &x=4k+1,k\in Z\\(x-2)\oplus(x-1)\oplus x, &x=4k+2,k\in Z\\(x-3)\oplus(x-2)\oplus(x-1)\oplus x, &x=4k+3,k\in Z& \end{cases} \end{aligned}\)

我们可以进一步简化

  1. 第一个原样
  2. \((x-1)\oplus x\), 由于x=4k+1,末尾为1,而\((x-1)\oplus x = ...1\oplus ...0 = 0...1 = 1\)
  3. \((x-2)\oplus(x-1)\oplus x\) 中x=4k+2,所以\((x-2)\oplus(x-1) = 1\)\(1\oplus x = x + 1(x=4k+2,末位为0,所以异或末位加1)\)
  4. 这个参考上面的性质5即可
    \( \text{sumXor}(x)= \begin{cases}x, &x=4k,k\in Z\\1, &x=4k+1,k\in Z\\x+1, &x=4k+2,k\in Z\\0, &x=4k+3,k\in Z \end{cases} \)
posted @ 2024-04-28 17:02  DawnTraveler  阅读(9)  评论(0编辑  收藏  举报