diff --git a/notes/Leetcode 题解 - 位运算.md b/notes/Leetcode 题解 - 位运算.md
index 239e4453..f6dc375a 100644
--- a/notes/Leetcode 题解 - 位运算.md
+++ b/notes/Leetcode 题解 - 位运算.md
@@ -15,6 +15,7 @@
* [11. 实现整数的加法](#11-实现整数的加法)
* [12. 字符串数组最大乘积](#12-字符串数组最大乘积)
* [13. 统计从 0 \~ n 每个数的二进制表示中 1 的个数](#13-统计从-0--n-每个数的二进制表示中-1-的个数)
+ * [参考资料](#参考资料)
@@ -56,16 +57,16 @@ x ^ x = 0 x & x = x x | x = x
#### 位与运算技巧
-n&(n-1) 去除 n 的位级表示中最低的那一位 1。例如对于二进制表示 01011011,减去 1 得到 01011010,这两个数相与得到 01011010。
+n&(n-1) 去除 n 的位级表示中最低的那一位 1。n-1 把这一位 1 变成 0、它右边的 0 都变成 1,更高的位不变,因此相与后只去掉了这一位。例如对于二进制表示 10110100,减去 1 得到 10110011,这两个数相与得到 10110000。
```text
-01011011 &
-01011010
+10110100 &
+10110011
--------
-01011010
+10110000
```
-n&(-n) 得到 n 的位级表示中最低的那一位 1。-n 得到 n 的反码加 1,也就是 -n=\~n+1。例如对于二进制表示 10110100,-n 得到 01001100,相与得到 00000100。
+n&(-n) 得到 n 的位级表示中最低的那一位 1。在补码中 -n=\~n+1,加 1 后最低的那一位 1 及其右边的位与 n 相同,更高的位都与 n 相反。例如对于二进制表示 10110100,-n 得到 01001100,相与得到 00000100。
```text
10110100 &
@@ -91,7 +92,7 @@ n-(n&(-n)) 则可以去除 n 的位级表示中最低的那一位 1,和 n&(n-1
```text
11111111111111111111111111111001 >>> 2
--------
-00111111111111111111111111111111
+00111111111111111111111111111110
```
\<\< n 为算术左移,相当于乘以 2n。-7 \<\< 2 = -28。
@@ -104,20 +105,20 @@ n-(n&(-n)) 则可以去除 n 的位级表示中最低的那一位 1,和 n&(n-1
#### mask 计算
-要获取 111111111,将 0 取反即可,\~0。
+要获取 32 位全为 1 的 int,将 0 取反即可,\~0。
要得到只有第 i 位为 1 的 mask,将 1 向左移动 i-1 位即可,1\<\<(i-1) 。例如 1\<\<4 得到只有第 5 位为 1 的 mask :00010000。
-要得到 1 到 i 位为 1 的 mask,(1\<\