不用加减乘除做加法

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;//即为最终结果

以上是关于不用加减乘除做加法的主要内容,如果未能解决你的问题,请参考以下文章

48不用加减乘除做加法

剑指offer不用加减乘除做加法

剑指offer系列——48.不用加减乘除做加法

LeetCode:位运算实现加法

剑指offer——不用加减乘除做加法

剑指offer不用加减乘除做加法