標簽:
位運算
描述
Write a function that add two numbers A and B. You should not use +
or any arithmetic operators.
解題思路:
利用位運算來解決A+B的問題,可以將此問題轉化為解決不進位相加和進位(carry bit)的兩部分問題:
1. 首先是不進位相加:_A = A^B 先對A和B進行異或運算(XOR manupitation) , A 和B 中兩位不相同的變為1,相同的變為 0, 同為1是不進位
2. 其次是進位 _B =(A&B)<<1
所以 A+B = A^B + (A&B)<<1
3.在循環中(A&B)<<1 的目的是將要進位的1一直向左移動,之后與新生成的_A進行異或運算,來進行進位運算的模擬(這一步就是進位)
4. 直到將所有的1全部向左移位為0
參考代碼: