题目:写一个函数,求两个数之和,要求在函数体内不得使用+、-、×、÷四则运算符号。
思路:我们可以先分析一下如何做十进制加法的,比如如何得出5+17=22这个结果。分三步:
- 只做各位相加不进位,结果为12。
- 考虑进位,进位值为10。
- 把第一步和第二步的结果相加,相当于是一个规模更小的加法,重复第一二步。
类比到二进制,第一步用异或运算实现,第二步先做位与然后再左移一位,第三步做加法。
#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下运行通过