用位操作实现+

27 篇文章 1 订阅

将加法的某一项取负,便可以实现减法。(为了避免溢出,将中间变量定义为long long,long达不到要求)

用与(&)和左移(<<)计算进位,用异或(^)计算基本和(不包含进位)

用位操作实现加法的步骤为:

1、用两个数字的与和左移,判断有没有进位(非0,为有进位)。

2、若有进位,将基本和、进位作为相加的两个元素回到步骤1。

3、若没有进位,返回基本和

#include <iostream>  
using namespace std;
int add(int a,int b)
{
	int val;
	while (val = ((a&b) << 1))  //判断有无进位
	{
		a = a^b;     //基本和
		b = val;     //进位
	}
	return a^b;
}

int main()
{
	cout << add(12,-5);
	system("pause");
	return   0;
}
#include <iostream>  
using namespace std;
long long add(int a,int b)
{
	long long base1 = a;
	long long base2 = b;
	long long jinwei;
	while (jinwei = ((base1&base2) << 1))
	{
		base1 = base1^base2;
		base2 = jinwei;
	}
	return base1^base2;
}

int main()
{
	cout << add(1,INT_MAX);
	system("pause");
	return   0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值