不用运算符的加法运算

news/2025/1/13 7:52:46/

一.不用运算符的加法

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了.

这里我们就不进行举例了,直接看代码.

3.代码实现

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


http://www.ppmy.cn/news/107643.html

相关文章

Unity MVC实现背包系统(2)

在上一篇中&#xff0c;我们写了背包系统的伪代码&#xff0c;也说了mvc的设计思路&#xff0c;那么这一篇的任务就是将伪代码补全。 首先制作一个背包面板&#xff0c;我这里比较简单&#xff0c;就是一个滚动视图&#xff0c;还有一个提示文本&#xff0c;外加两个按钮&…

手动计算校正年龄、性别后的标准化死亡率 (SMR)

分析队列人群有无死亡人数超额&#xff0c;通常应用标准人群死亡率来校正&#xff0c;即刻观察到中的实际死亡数&#xff08;D&#xff09;与定一个标准的死亡人数&#xff08;E&#xff09;&#xff0c;D与E之比称为死亡比&#xff08;standarized Mortality ratio&#xff0c…

zookeeper机制及消息队列kafka

目录 一、zookeeper1、zookeeper简介2、zookeeper特点3、zookeeper工作模式及机制4、zookeeper应用场景及选举机制5、zookeeper集群部署 二、消息队列kafka1、为什么要有消息队列2、使用消息队列的好处3、kafka简介4、kafka特点5、kafka系统架构名词介绍6、Kafka架构及流程7、k…

SpringBoot Redis Cache

知识点 Spring高版本引入了Cache的注解技术。该技术是一种规范&#xff0c;官方支持的实现包括Generic、JCache(JSR-107)、&#xff08;EhCache 3&#xff0c;Hazelcast&#xff0c;Infinispan&#xff0c;and others&#xff09;、EhCache 2.x、Hazelcast、Infinispan、Couch…

阿里巴巴淘天集团后端暑期实习面经

目录 1.面向对象三大特性2.重写和重载3.protected 关键字和 default 关键字的作用范围4.栈帧中有哪些东西&#xff1f;5.堆中有哪些区域&#xff1f;6.new 一个对象存放在哪里&#xff1f;7.CMS 收集器回收阶段8.CMS 收集器回收过程哪些需要暂停线程&#xff1f;9.HashMap JDK …

电商客户消费预测模型-基于数千万真实在线零售数据__企业调研_论文科研_毕业设计

之前发过 《谁主沉浮&#xff1f;银行&#xff0c;消金&#xff0c;互联网公司的精准营销_智慧营销完全解读》介绍了智慧营销/精准营销目的是降低运营成本。但精准营销可以带来很多额外收益&#xff0c;例如提高销售利润&#xff0c;提高客户忠诚度&#xff0c;降低客户流失率&…

关于数据科学的文本分析案例

在本文中&#xff0c;我们尝试通过进行一些文本挖掘来发现数据科学相关概念。我们将从一篇关于数据科学的文本开始&#xff0c;从中提取关键字&#xff0c;然后尝试可视化结果。 作为文本&#xff0c;将使用维基百科的数据科学页面&#xff1a; url https://en.wikipedia.org…

几种经典算法

1.分治法 分治法也叫做分而治之法。核心思想是将一个难以直接解决的大问题依照相同的概念分割成两个或者多个相同的小问题&#xff0c;以便各个击破。 如图所示&#xff1a; 2.递归法 递归法和分而治之法像一对孪生兄弟&#xff0c;都是将一个复杂的算法问题进行分解&#x…