不用加减乘除做加法

本文介绍了如何通过异或和位与运算实现二进制数的加法运算,包括二进制相加、记录进位和结果合并的步骤,并提供了代码实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值