位运算这种东西,代码一般比较简单,但比较难想到。属于是见过就会,没见过就不会那种。而且比较难记住,很容易记错记混。
位运算模拟加法
设两个数字的二进制形式为 $a$、$b$,其和 $s=a+b$,$a(i)$ 表示 $a$ 的二进制第 $i$ 位。
$a(i)$ | $b(i)$ | 无进位和 $n(i)$ | 进位 $c(i+1)$ |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 1 | 1 | 0 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 |
规律就是:对单个数位而言,异或结果就是无进位和,与运算结果就是进位(因为是进位,还需左移一位)。
位运算模拟加法的公式就是:(a^b) ^ ((a&b)<<1)
,循环这个过程,直到进位为 0。