1原理
1.1 正数
十进制下:5 + 7 = 12
5: 0101
7: 0111
二进制下两数求和,分三步:
- 各位值相加,不算进位值,二进制亦或运算
- 计算进位值,二进制与运算,然后左移一位;
- 对1,2步的结果,重复以上两步骤
两数之和就是不计算进位值加上进位值,直到没有进位
第二部为什么要左移?
当你在十进制下计算5+7时,进位向前一位进1,也就是相当于左移
5 + 7的详细计算:
第一次:
亦或:0101^0111 = 0010,没有进位的值。
与:0101&0111 = 0101,等于1的位说明这一位是要产生进位的。而进位是要向前进一位,所以要左移,
0101 ,两个位置为1,说明是有两个位置需要进位,左移运算,0101<<1 = 1010
第二次:
0010^1010 = 1000
(0010&&1010)<<1 = 0100 # 还有进位,需要继续加
第三次:
1000^0100 = 1100
(1000&&0100) <<1= 0000 # 没有进位
进位为0,返回第一步的结果。
1.2 负数
博客上好多教程