剑指Offer 47 不用加减乘除做加法

本文介绍了一种不使用常规四则运算符号实现两整数相加的方法。通过位运算中的异或和与操作,巧妙地解决了进位问题,实现了整数加法。

题目描述

写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

思路

  1. 依靠位运算,其实真的很巧妙对于+运算,难点其实就在进位运算;
    (101+10001)不考虑进位就是=10100;就是异或运算,只有一个1一个0才等于1;然后考虑进位,两个都是1才可能产生进位;也就是与运算;然后在左移一位即可;

代码

    static public int Add1(int num1,int num2)
    {
        int sum;
        int carry;
        while (num2!= 0)
        {
            sum =num1 ^num2 ;  //异或,不算进位的结果
            carry = (num1 & num2) <<1; //两个都是1就会进位,然后右移一位;
            num1 = sum;
            num2 = carry;               //进位如果不是零就可以跳出了
        }
        return num1;
    }

收获

  1. 奇特的加法运算;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值