不用运算符的加法运算

这篇具有很好参考价值的文章主要介绍了不用运算符的加法运算。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.不用运算符的加法

1.题目描述

设计一个函数把两个数字相加。不得使用 + 或者其他算术运算符。

力扣:力扣

2.问题分析

1.知识预备

注意:下面所有的结论的进位是考虑二进制的进位,因为我们使用的位运算符,是针对二进制进行的.

  • 结论一:在不考虑进位的情况下,其无进位加法结果为 a⊕b.
  • 结论二:而所有需要进位的位为 a & b,进位后的进位结果为 (a & b) << 1.

2.问题解决

知道了上面两个内容之后,我们就可以很容易的对这个问题进行解决了.

情况一:当a+b没有进位的情况,根据上面的结论,结果很显然是a⊕b

  举例说明:1+2    从下图可以看出相加的结果为异或的结果.

不用运算符的加法运算

情况二:当a+b有一次进位的情况,当我们存在进位的情况的时候,显然这个时候的结果应该是进位的结果加上异或的结果,但是我们是不能使用加法运算的,因此我们必须在进行循环运算,先保留a^b的结果,也就是没有进位的结果,然后保留进位结果carry=(a&b)<<1;然后再进行a^b^carry,,carry之后保留的结果就为0了,因为我们现在考虑是一次进位的情况.

  举例说明:3+2   

不用运算符的加法运算

情况三:当a+b有n次进位的情况  其实根据情况三我们就可以总结出规律了,当某次运算保留的carry结果为0的时候,我们得到的结果就为最终的结果了,也就相当于(ans+carry(0))=ans了.

这里我们就不进行举例了,直接看代码.文章来源地址https://www.toymoban.com/news/detail-475166.html

3.代码实现

    public int add(int a, int b) {
        while(b!=0){
            int carry=(a&b)<<1;
            a=a^b;
            b=carry;
        }
        return a;

    }

到了这里,关于不用运算符的加法运算的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包