资讯专栏INFORMATION COLUMN

java 给出两个整数a和b , 求他们的和。不用用运算符+

Cobub / 2320人阅读

分析

首先来理解一下十进制的加法
8884 + 146 = 9030
依据 不进位+进位这一思想进行详述
首先是不进位的结果是8920

哪几位需要进位呢? 0011 也就是个位和十位需要进位,个位、十位进位之后的值为110,而这个结果是需要加到上面的不进位的值,即8920+110 = 8030 同样这是没有进位的,但是在这次相加的过程中也有进位的考量,哪几位呢?即100,百位的位置需要进位,那就再左移即可,为1000,然后加上上面的不进位相加的和,最后结果是9030,最后再看一下,还需不需要进位呢?发现8030&1000=0(按着二进制的形式写的,便于理解),此时是没有再需要进位的了,即最后结果就是9030了。

下面推广到二进制,是同样的思路的。
来看一下13+7这两个数的求和过程
13的二进制表示为:1101
7的二进制表示为: 0111
先求不进位的两个数之和,1101^0111 = 1010 ,而哪几位需要进位呢?
可以用&运算符来确定,即1101 & 0111 = 0101,将此结果左移即是进位之后需要加在1010上面的值,这就有变成刚开始的状态了,两个数相加,先算不进位状态的和,然后再看哪几位需要进位,上面两种状态的值为 0000(不进位的结果) 1010(需要进位,待计算),后面的值再左移表示进位之后的结果为10100,
此时新的两个数是0000,10100,

public class Solution{
    /**
     * @param a: An integer
     * @param b: An integer
     * @return: The sum of a and b 
     */
    public int aplusb(int a, int b) {
        if (b==0) 
            return a;
        return aplusb(a^b, (a&b)<<1);
    }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/72446.html

相关文章

  • LeetCode 150:逆波兰表达式值 Evaluate Reverse Polish Nota

    摘要:题目根据逆波兰表示法,求表达式的值。给定逆波兰表达式总是有效的。逆波兰表达式又叫做后缀表达式。解题思路可以看出逆波兰表达式中的每一个运算符属于该运算符前的两个数字间的运算。如如波兰表达式则加号前两个数字为。 题目: 根据逆波兰表示法,求表达式的值。 有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。 Evaluate the value of...

    Turbo 评论0 收藏0
  • 数据结构与算法的Python实现(一)——抽象数据类型Python类

    摘要:一抽象数据类型,缩写为是计算机领域一种很基础的方法,基本的思想就是数据抽象。二抽象数据类型的概念和描述抽象数据类型把数据定义为抽象的对象集合,只为他们定义可用的操作,而不用暴露具体的实现细节。 文章首发于公众号一件风衣(ID:yijianfengyi) 名人名言强调基础的重要性的句子不胜枚举,数据结构与算法作为计算机专业的必学科目,其重要性不言而喻。 在以往的教学体系中,数据结构与算法...

    Batkid 评论0 收藏0
  • Java 数据类型算符

    摘要:基本数据类型布尔类型或,占用位。强制类型转换强制类型转换的语法格式是,强制类型转换的运算符是圆括号。无符号右移运算符。对于低于类型如和的操作数总是先自动类型转换为类型后再移位。 注释 单行注释//......多行注释/ .../文档注释/*.../ 文档注释位于注释内容上一行 标识符和关键字 分隔符 分号:作为语句的分隔,每个Java语句必须使用分号作为结尾。花括号:定义一个代码...

    archieyang 评论0 收藏0
  • 1034 有理数四则运算 (20 分)java

    摘要:本题要求编写程序,计算个有理数的和差积商。输出格式分别在行中按照有理数运算符有理数结果的格式顺序输出个有理数的和差积商。注意输出的每个有理数必须是该有理数的最简形式,其中是整数部分,是最简分数部分若为负数,则须加括号若除法分母为,则输出。 本题要求编写程序,计算 2 个有理数的和、差、积、商。 输入格式:输入在一行中按照 a1/b1 a2/b2 的格式给出两个分数形式的有理数,其中分...

    mikyou 评论0 收藏0
  • Java基础语法知识你真的都会吗?

    摘要:而所有的数据运算都是采用补码进行的。补码解决负数加法运算正负零问题,弥补了反码的不足。通过使用访问修饰符可以使实例变量对子类可见暂时在学习基础语法知识的时候可以暂时忽略实例变量这部分内容,这部分内容主要被使用在面向对象的部分,但是极其重要。 showImg(https://segmentfault.com/img/remote/1460000019264541?w=600&h=242)...

    DirtyMind 评论0 收藏0

发表评论

0条评论

Cobub

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<