位运算 - 例题加知识点概括
知识点概括
参考链接:https://leetcode.cn/leetbook/read/leetcode-cookbook/5c9u92/
1. 异或运算(^)
(1)x ^ 0 = x
(2)x ^ x = 0
(3)x ^ 111...111 = ~x
(4)x ^ (~x) = 111...111
起始(1)(2)和(3)(4)则是下面两条定律
(5)a ^ b = c => a ^ c = b => b ^ c = a (交换律)
(6)a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c (结合律)
2. 与运算(&)
最低有效位,英文全称是:the least significant bit,缩写为:LSB,是指一个二进制数字中的第0位(即最低位),具有权值为2^0,可以用它来检测数的奇偶性。
(1)x & 1 == 1 (判断是否为奇数)
(2)x & 1 == 0 (判断是否为偶数)
(3)x & 7 (取末尾三位)
(4)x & = x+1 (把二进制中连续的1变成0)
(5)x & = x-1 (将最低位(LSB)的1清零,其余位置不变)
(6)x & -x (保留最低位(LSB)的1,其余位置置零)
(7)x & ~x = 0
3. 或运算(|)
(1)x | 1 (最后一位变成1)
(2)x |= x+1 (把右起的第一个0变成1)
4. 移位运算(<<、>>)
优先级问题(参考链接):
# 优先级由高到低
**
~ + - (正负号)
* / % //
+ -
<< >>
&
^
|
== > < => <= != in not in
is
is not
not
or and
(1)x >> 1(去掉最后一位,即除以二)
(2)x << 1(在最后加个0,即乘以二)
(3)x << 1 | 1 (在最后加个1)
(4)x & (~0 << n) (x的最右边的n位清零)
(5)(x >> n) & 1 (获取x的第n位的值)
(6)x & (1 << (n-1)) (获取x的第n位的幂数)
(7)x | (1 << n) (将x的第n位置1)
(8)x & (~ (1 << n)) (将x的第n位置0)
(9)x & (~((1 << (n+1)) - 1)) (将x的第n位到第0位清零)
(10)x >> (n-1) & 1 (取x的右数第n位)
(11)x | ((1<<k)-1) (把x的末k位变成1)
(12)x ^ (1<<k-1) (把x的末k位取反)
5.小结
后学更新相关的例题,同时有关排序的例题也会跟着更新,刷题还挺舒服的。