采用位运算符实现:
#include<stdio.h>
/* 不用(+)运算符实现两个整数相加 */
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); /* 各位相加的结果与进位的结果进行求和 */
}
int main()
{
signed num1 = -1;
signed num2 = -5;
printf("%d\n", add_without_operater(num1, num2));
return 0;
}