不使用四则运算实现加法

写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
首先想到使用位运算去模拟,那么下一步就是怎么模拟。
二进制的按位相加实际等效于异或。
二进制的每位的进位计算等效于按位与,然后左移。
进位加上按位相加结果就是最终结果。
注意,上一步还可能会有进位,不过没关系,还可以重复使用前两步,直到没有进位为止。

int Add(int num1, int num2)
{
    int sum = 0;
    int carry = 0;
    do
    {
        sum = num1^num2;
        carry = (num1 & num2)<<1;

        num1 = sum;
        num2 = carry;
    }
    while(num2!=0);
    return num1;
}

另外再记录两种不使用临时变量,甚至不使用四则运算交换数字的方案

int swapv1(int &num1,int &num2)
{
    num1 = num1+num2;
    num2 = num1-num2;
    num1 = num1-num2;
}

int swapv2(int &num1, int &num2)
{
    num1 = num1^num2;
    num2 = num1^num2;
    num1 = num1^num2;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值