位运算

位运算这种东西,代码一般比较简单,但比较难想到。属于是见过就会,没见过就不会那种。而且比较难记住,很容易记错记混。

位运算模拟加法

设两个数字的二进制形式为 $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。

例题:剑指 Offer 65. 不用加减乘除做加法

曾梦想仗剑走天涯,后来没钱就没去