利用位运算的特点做加法

  题目:写一个函数,求两个数之和,要求在函数体内不得使用+、-、×、÷四则运算符号。

思路:我们可以先分析一下如何做十进制加法的,比如如何得出5+17=22这个结果。分三步:

  1. 只做各位相加不进位,结果为12。
  2. 考虑进位,进位值为10。
  3. 把第一步和第二步的结果相加,相当于是一个规模更小的加法,重复第一二步。

类比到二进制,第一步用异或运算实现,第二步先做位与然后再左移一位,第三步做加法。

#include<stdio.h>

/*
**位运算做加法
*/
int 
myAdd(int num1, int num2)
{
	int sum;
	int carry;
	do
	{
		sum = num1 ^ num2;
		carry = (num1&num2) << 1;

		num1 = sum;
		num2 = carry;
	} while (num2 != 0);//没有进位为止。
	return num1;
}

int 
main()
{
	int a = 100;
	int b = 200;
	int sum = myAdd(a, b);

	printf("%d\n", sum);
	return 0;
}
本程序在VS2017下运行通过
阅读更多
版权声明:本文为博主原创文章,若要转载注明出处即可,欢迎分享! https://blog.csdn.net/qq_41822235/article/details/80317967
文章标签: 加法(位运算)
个人分类: C/C++ 剑指Offer
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭