剑指offer56:数组中只出现一次的两个数字
题目链接:

本题使用的是异或运算
异或运算的特点:
1.a^a = 0
2.0^a = a
*本题的技巧在于,第一次将数组遍历异或后得到两个目标数的异或结果
* 找到结果中为1的那一位(按位和1相与运算),即两个目标数存在区别的位
* 利用这个区分点,可以将数组划分为两部分
* 对两部分分别异或,就可以得到两个目标数结果

剑指offer65不用加减乘除做加法
题目链接:

step 1:两数进行与运算可以产生进位的信息
step 2:运算后执行左移1位就是每轮需要进位的方案
step 3:两数进行异或运算可以产生非进位的加和结果
step 4:将移位后的进位结果与非进位结果继续重复 step 1 - step 3 的步骤,直到不再产生进位为止
举例说明:
5 + 7 = 101 + 111 = 1100
step1:101 & 111 = 101
step2:101 << 1 = 1010
step3:101 ^ 111 = 010
重复上述操作
1010 & 010 = 0010
0010 << 1 = 00100
1010 ^ 010 = 1000
00100 & 1000 = 0000
0000 << 1 = 00000
00100 ^ 1000 = 1100
