不用加减乘除做加法

来源:互联网 发布:部落战争mac电脑版 编辑:程序博客网 时间:2024/06/05 02:36

对于num1+num2可分为三步完成:

(1)对num1与num2做二进制相加,不计进位(这一步可用异或实现);

(2)记录进位(可用位与运算,因为相同位都为1,才会向前产生进位;即得到进位的方法为(num1&num2)<<1);

(3)把(1)与(2)的结果相加,方法同上,直到不再产生进位,即可得到结果;

由于不能使用加减乘除,那么我们可以试着考虑位操作对两数进行运算:

如:num1=5,num2=17,两者相加结果为22;若采用上述方法,则相加步骤如下:

      两数的二进制值分别为:num1=101,num2=10001.

    (1)101^10001=10100(不计进位);

    (2)101&10001=00001,因为是向前进位,所以进位后为;(00001)<<1=10;

    (3)把(1)与(2)相加得:10100^10=10110=22,未产生进位,所以10110即为最终结果;


代码实现:

     

int Add(int num1, int num2){int sum = 0;int carry = 0;//进位do{sum = num1^num2; //两数二进制异或结果carry = num1&num2;//两数相与产生的进位//求sum+carry的结果num1 = sum; //sum作为新的加数num1;num2 = carry;//carry作为新的加数num2;} while (num2 != 0);return num1;//即为最终结果}

0 0
原创粉丝点击