题解 | #不用加减乘除做加法#
不用加减乘除做加法
http://www.nowcoder.com/practice/59ac416b4b944300b617d4f7f111b215
- 计算机中所有数字均已补码表示,这样即使遇到了负数也会自动转化成加法运算。
- 这个规律是画图发现的,所以移位得时务必转换为无符号数在进行计算。否则结果错误。
- 终止条件是num2(最后会被认为是进位)进位为0自然被认为是停止运算了。
- 结果最后就是num1^=num2;
class Solution { public: int Add(int num1, int num2) { //当进位为0的时候,标记着运算结束了。 while(num2!=0){ // 负数左移会在低位补1,所以转化为无符号整数 int c = ((unsigned int)(num1&num2))<<1; num1^=num2;//最终得运算结果会给num1; num2 = c;//num2承接进位 } return num1; } };
剑指Offer 文章被收录于专栏
剑指offer的解析结合