不用运算符的加法运算

news2024/11/23 1:00:56

一.不用运算符的加法

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.coloradmin.cn/o/589542.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【group by】mysql分组查询的案例和原理

【group by】mysql分组查询的案例和原理 【一】group by的使用场景【二】group by的基本语法【1】基本语法【2】常用的聚合函数&#xff08;1&#xff09;max函数&#xff1a;取出分组中的最大值&#xff08;2&#xff09;avg函数&#xff1a;取出分组中的平均值&#xff08;3&…

斩获大奖!「智办事绩效」荣获钉钉年度奖项-「含钉量新锐奖」

近日&#xff0c;钉钉发布「含钉量年度奖」榜单&#xff0c;「智办事绩效」凭借与钉钉的深度融合斩获钉钉年度奖项-「含钉量新锐奖」。 ​作为钉钉优质合作伙伴&#xff0c;智办事绩效致力于用数字化、智能化的产品与专业的服务&#xff0c;解决传统绩效管理、人才培养痛点&…

【JOSEF约瑟 JDL-5200A 电流继电器 过负荷或短路启动元件 导轨安装】

名称&#xff1a;电流继电器&#xff1b;品牌&#xff1a;JOSEF约瑟&#xff1b;型号&#xff1a;JDL-5200A触点容量&#xff1a;250V2A&#xff1b;返回时间&#xff1a;≤35ms&#xff1b;整定范围&#xff1a;0.03-19.9A&#xff1b;特点&#xff1a;返回系数高、安装方便。…

前端vue面试题

四、路由 1. Vue-Router 的懒加载如何实现 非懒加载&#xff1a; import List from /components/list.vue const router new VueRouter({routes: [{ path: /list, component: List }] })&#xff08;1&#xff09;方案一(常用)&#xff1a;使用箭头函数import动态加载 co…

content-visibility:可以提高项目的渲染性能

文章目录 一、前言二、浏览器支持程度三、CSS Containment四、跳过具有 content-visibility 的渲染工作五、关于accessibility的说明六、使用contains-intrinsic-size指定元素的自然大小七、通过content-visibility: hidden隐藏内容八、对下一幅画的交互影响(INP) 一、前言 co…

chatgpt赋能python:Python中*para:使用一个参数解决多个参数

Python中*para&#xff1a;使用一个参数解决多个参数 Python是广泛使用的编程语言之一&#xff0c;它非常灵活&#xff0c;可扩展性强&#xff0c;可以通过许多不同的方式实现编程目标。在Python中&#xff0c;有一种非常有用的特性&#xff0c;那就是使用para来代替多个参数。…

微信小程序原生开发功能合集十六:系统主页实现

本章实现小程序主页开发及对应逻辑处理,实现问卷填报相关功能,实现问卷查看、问卷查看、填报历史等功能的实现。   另外还提供小程序开发基础知识讲解课程,包括小程序开发基础知识、组件封装、常用接口组件使用及常用功能实现等内容,具体如下:    1. CSDN课程: http…

ArcGis系列-java发布GP分析结果(带样式)

1&#xff0c;前言 继上一篇 ArcGis系列-java调用GP分析 &#xff0c;已经实现了gp工具的发布&#xff0c;调用&#xff0c;轮询&#xff0c;并已经分别保存好发布地图服务所需的矢量数据json&#xff0c;栅格数据tif文件和样式文件 要将gp分析的结果发布为图层供前端展示&am…

模版的分离编译 解决方案

回顾 对于模版&#xff0c;在之前我们就已经讲过&#xff0c;模版不支持分离编译&#xff08;即声明定义不在同一文件中&#xff09;。 类中&#xff0c;我们知道&#xff0c;对于代码量比较小的函数&#xff0c;会默认识别成内联函数&#xff0c;增加代码运行的效率&#xf…

【LeetCode 142】环形链表II

思路&#xff1a; 本题需要考虑以下两个问题&#xff1a; 判断链表是否环 如果有环&#xff0c;如何找到这个环的入口 一开始想着使用双指针的办法实现&#xff0c;但是发现没有什么思路&#xff0c;后面看了一些解析&#xff0c;用的快慢指针&#xff0c;两个指针重逢了&a…

IMX6ULL裸机篇之I2C协议

一. IIC实验简介 I2C 是最常用的通信接口&#xff0c;众多的传感器都会提供 I2C 接口来和主控相连。 比如摄像头、 加速度计、触摸屏等。 I.MX6U-ALPHA开发板 使用 I2C1 接口连接了一个距离传感器 AP3216C &#xff0c;本章我们就来学习如何使用 I.MX6U 的 I2C 接口…

自学网络安全有什么好方法?

一、网络安全学习的误区 1.不要试图以编程为基础去学习网络安全 不要以编程为基础再开始学习网络安全&#xff0c;一般来说&#xff0c;学习编程不但学习周期长&#xff0c;且过渡到网络安全用到编程的用到的编程的关键点不多。一般人如果想要把编程学好再开始学习网络安全往…

深度学习AI编译器-TVM简介

1.为什么需要深度学习编译器 深度学习编译器主要为解决不同框架下训练的模型 部署到指定的某些设备上时所遇到的一系列复杂的问题&#xff0c;即将各种深度学习训练框架的模型 部署到各种硬件所面临的问题&#xff1b; 首先深度学习领域&#xff0c;从训练框架看&#xff0c;当…

C++ 编译过程(附简单实例)

C 编译的四个阶段&#xff1a;预处理、编译、汇编和链接。 这里以 g 为例&#xff0c;用到的文件分别为 mymath.h、mymath.cpp 和 main.cpp &#xff0c;代码如下&#xff1a; // mymath.h extern int add(int, int);// mymath.cpp #include "mymath.h" // implemen…

攻防世界-web-newscenter

题目描述&#xff1a;打开链接&#xff0c;只有一个搜索框&#xff0c;然后就是一条一条新闻的记录 开启burpsuite&#xff0c;我们在搜索框中随便输入点什么&#xff0c;然后进行搜索&#xff0c;看下抓到的包 这里搜索的时候只有一个search参数&#xff0c;查询到的新闻数也变…

花6个月面过京东软件测试岗,拿个20K不过分吧?

背景介绍 计算机专业&#xff0c;代码能力一般&#xff0c;之前有过两段实习以及一个学校项目经历。第一份实习是大二暑期在深圳的一家互联网公司做软件测试&#xff0c;第二份实习由于大三暑假回国的时间比较短&#xff08;小于两个月&#xff09;&#xff0c;于是找的实习是在…

通过Python的fitz库提取pdf中的图片

文章目录 前言一、fitz库是什么&#xff1f;二、安装fitz库三、查看fitz库版本四、pymupdf库是什么&#xff1f;五、安装pymupdf库六、查看pymupdf库版本七、fitz和pymupdf是什么关系&#xff1f;八、提取pdf中的图片1.引入库2.定义pdf路径3.打开PDF文件4.遍历所有页面5.获取页…

javaWeb ssh小区物业管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh小区物业管理系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0…

Pytest测试框架中,setup和teardown函数的作用及使用方法

作为一名Python开发人员&#xff0c;您一定知道Pytest是一个广泛使用的Python测试框架。 它具有易用性和灵活性&#xff0c;可以帮助您快速编写测试用例&#xff0c;并且能够支持包括单元测试、集成测试、功能测试等多种测试类型。而其中&#xff0c;setup和teardown函数是Pyt…

C++三大特性—多态 “抽象类与虚函数表”

抽象类和虚函数表是 C中实现多态性的重要概念&#xff0c;它们对于学习 C非常重要。 掌握抽象类和虚函数表的使用方法对于理解 C的多态性是非常重要的。在 C中&#xff0c;通过使用抽象类和虚函数表&#xff0c;可以实现基于多态性的各种功能&#xff0c;如继承、多态、模板等。…