不用加减乘除做加法
Posted ZDF0414
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不用加减乘除做加法相关的知识,希望对你有一定的参考价值。
对于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;//即为最终结果
以上是关于不用加减乘除做加法的主要内容,如果未能解决你的问题,请参考以下文章