问题描述:写一个函数,要求不用加法操作符(+)实现加法运算。
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
/* 不用(+)运算符实现两个整数相加 */
int add_without_operater(int a, int b);
int main(){
unsigned num1 = -3;
unsigned num2 = 5;
printf("%d\n", add_without_operater(num1, num2));
return 0;
}
int add_without_operater(int a, int b){
if(b == 0) /* 当没有产生进位时 */
return a;
int sum; /* 不考虑进位,各位相加后的结果 */
int plus; /* 两个整数相加产生的进位 */
sum = a ^ b; /* 二进制中用异或操作(^)进行各位相加 */
/* 0 + 0 = 0 0 ^ 0 = 0 */
/* 0 + 1 = 1 0 ^ 1 = 1 */
/* 1 + 0 = 1 1 ^ 0 = 1 */
/* 1 + 1 = 0 1 ^ 1 = 0 */
plus = (a & b) << 1; /* 两个整数中各位都为1的位产生进位(两数进行与(&)操作 */
/* 然后向上进一位(向左移(<<)一位)*/
add_without_operater(sum, plus); /* 各位相加的结果与进位的结果进行求和 */
}