【 声明:版权所有,转载请标明出处,请勿用于商业用途。 联系信箱:libin493073668@sina.com】
题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
思路
题目要求不用四则运算,那么我们能够想到的也就只有位运算了,那么我们怎么使用位运算来计算加法呢?
首先我们看,两数相加不进位的情况,这其实就是两个数异或的值。
而我们接下来就得计算进位了,我们知道二进制中只有同为1的时候才需要进位,而同为1的话,我们只有通过&运算来取得。
得到了上述的结论之后,我们就可以知道,整个加法的过程就是两个数的异或和相与并左移的一个过程了。
class Solution { public: int Add(int num1, int num2) { int sum,carry; do { sum = num1^num2; carry = (num1&num2)<<1; num1 = sum; num2 = carry; }while(num2); return num1; } };
版权声明:本文为博主原创文章,如果转载,请注明出处
原文地址:http://blog.csdn.net/libin1105/article/details/48413695