【算法】位运算算法——两整数之和

news2025/1/4 18:53:47

题解:两整数之和(位运算算法)

目录

  • 1.题目
  • 2.位运算算法
  • 3.参考代码
  • 4.总结

1.题目

题目链接:LINK
在这里插入图片描述

2.位运算算法

这个题目难点就在于不能用+、-

那什么能够代替加号呢?
既然数的层面不能用+号,那二进制的角度去用+号即可。

恰好,就有两个这种运算符恰好满足我们的需求。
按位异或,对不存在进位的数字进行相加。
按位与,对需要进位的数字取1

当我们对a^b进行异或的时候,
我们发现:
如果1和0不同的位数异或是我们想要的结果,但两个二进制都是1的时候进行异或就不对(红色代表不满足我们预期,绿色代表满足我们预期)
在这里插入图片描述
结论:错误的都是需要进位的二进制

那如何进行进位呢?
怎么确定哪几个二进制位需要进位? ——按位与
按位与恰好可以解决我们这个问题,两个1的二进制位肯定是需要进位的啊(黄色代表需要进位的地方)。
在这里插入图片描述
那如何把这个黄色的位进到a^b上去呢?
我们可以把a&b向左移动一位,表示向其更高位进行进位。
在这里插入图片描述
然后我们再对a^b 和 (a&b)>>1再进行异或运算,看看能不能进上一位。
在这里插入图片描述
我们发现好像有个1进位成功,还一个没能成功,但是没关系,继续以此循环即可。

总过程如下:
在这里插入图片描述

3.参考代码

//一般版本
class Solution {
public:
    int getSum(int a, int b) 
    {
        int Carry = 1;
        while(Carry)
        {
           int add = a ^ b;
           Carry = (a & b) << 1;

           a = add;
           b = Carry;
        }

        return a;        
    }
};
//语法优化
class Solution {
public:
    int getSum(int a, int b) 
    {
        do
        {
           a = a ^ b;
           b = (((a^b) & b) << 1);
        }while(b);

        return a;        
    }
};

4.总结

我们本道题首先题目规定不能用+号,所以我们想到直接去二进制层面进行操作,用^代替无进位相加,用&代替进位,两者结合即可模拟出二进制层面加法的操作。


EOF

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1709430.html

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

相关文章

【RabbitMQ】SpringAMQP--消息转换器

SpringAMQP–消息转换器 测试发送Object类型消息 1.声明队列 Configuration public class FanoutConfig {Beanpublic Queue objectQueue(){return new Queue("object.queue");} }运行消费者后&#xff1a; 2.发送消息 RunWith(SpringRunner.class) SpringBootTes…

预训练模型语义相似性计算(十一) - M3E和BGE

M3E m3e由MokaAI 训练&#xff0c;开源和评测。 m3e的详细介绍可以看官方的github介绍。本文简要摘录其中一些点&#xff0c;以便后续的应用。 1.千万级 (2200w) 的中文句对数据(开源)。 2.支持同质相似句计算(s2s)和异质检索(s2p)&#xff0c;后续支持代码检索。 3.m3e基座模…

景源畅信:抖音小店新手小白如何做好运营?

在数字时代的浪潮中&#xff0c;抖音小店成为了众多创业者和商家的新宠。但面对激烈的市场竞争和不断变化的平台规则&#xff0c;新手小白如何才能在抖音小店的海洋里稳健航行&#xff0c;捕捉到属于自己的商机呢?接下来的内容将为你揭晓答案。 一、精准定位&#xff0c;明确目…

20240521在Ubuntu20.04下编译RK3588平台的IPC方案

20240521在Ubuntu20.04下编译RK3588平台的IPC方案 2024/5/21 15:27 viewproviewpro-ThinkBook-16-G5-IRH:~$ viewproviewpro-ThinkBook-16-G5-IRH:~$ md5sum RK3588_IPC_SDK.tar.gz 7481cc8d59f697a5fa4fd655de866707 RK3588_IPC_SDK.tar.gz viewproviewpro-ThinkBook-16-G5…

三维科技云展厅如何突破传统展览的局限,赋能企业高效展示

一、三维科技展厅如何实现科技展示 1、高度互动的展示方式 三维科技展厅通过虚拟现实和3D建模技术&#xff0c;为观众提供高度互动的展示体验。观众可以身临其境地参观展品&#xff0c;从而获得更为真实的感受。这样的展示方式不仅能够吸引观众的注意力&#xff0c;还能够提高他…

微服务架构五大设计模式详解,助你领跑行业

微服务架构设计模式详解(5种主流模式) 微服务架构 微服务&#xff0c;一种革命性的架构模式&#xff0c;主张将大型应用分解为若干小服务&#xff0c;通过轻量级通信机制互联。每个服务专注特定业务&#xff0c;具备独立部署能力&#xff0c;轻松融入生产环境&#xff0c;为系…

据库管理-第195期 Oracle RDMA(20240527)

数据库管理195期 2024-05-27 数据库管理-第195期 Oracle & RDMA&#xff08;20240527&#xff09;1 RDMA & Exadata2 RDMA & OCI3 RDMA的难点总结 数据库管理-第195期 Oracle & RDMA&#xff08;20240527&#xff09; 作者&#xff1a;胖头鱼的鱼缸&#xff08…

平方回文数-第13届蓝桥杯选拔赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第73讲。 平方回文数&#…

nginx编译安装手把手教学

编译安装nginx的第一步需要从nginx的官网找到nginx最新的稳定版本 下面这是官方网站的资源下载地址 https://nginx.org/en/download.html选中稳定版本点击右键——选择复制链接 在终端内使用wget指令官网下载地址&#xff0c;将nginx下载 使用wget指令下载 wget https://ng…

Docker 快速搭建 MongoDB 4.x 集群(一主一从)

目录 1. 生成 mongo-file2. 启动主节点3. 启动从节点4. 配置副本集5. 注意事项 环境&#xff1a;MongoDB 4.0.25&#xff0c;Alma Linux&#xff08;建议使用 Linux&#xff09; 部署的时候是在同一个及其上操作的&#xff0c;实际可以放在不同机器上。 截止到 2024年05月&…

Golang 创建第一个web项目(Gin + Gorm)

1. 写这篇博客的由来&#xff1a; 当你想使用最快的框架创建项目的时候是不是有点束手无策&#xff1f; 当你想配置数据库写 SQL 甚至不知道如何写&#xff0c;文件夹都不知道建在哪里&#xff1f; &#x1f604;因为Golang 目前并没有 JAVA 那种硬性规范&#xff0c;但是…

【Python】 用Python的Pandas库美化打印Series和DataFrame

基本原理 在Python的数据分析领域&#xff0c;Pandas是一个非常重要的库。它提供了丰富的数据结构和数据分析工具&#xff0c;使得处理大型数据集变得简单高效。当你使用Pandas处理数据时&#xff0c;经常需要查看数据的预览&#xff0c;这时候美化打印&#xff08;Pretty-pri…

SSMP整合案例第一步 制作分析模块创建与开发业务实体类

制作分析 我们要实现一个模块的增删改查 实际开发中mybatisplus用的不多&#xff0c;他只能对没有外键的单表进行简单的查询 但在这个案例中我们还是选择mybatisplus开发 模块创建 我们把所有服务器都放在一起 就不用前后端分离 我们尝试用后端开发进行全栈开发 新建项目添…

【分支控制】(switch) 详解

switch分支结构 基本语法 switch (表达式){case 常量1: //当...语句块1;break; //跳出switchcase 常量2:语句块2;break;...case 常量n;语句块n;break;default:default语句块;break;}switch 关键字, 表示switch分支表达式, 对应一个值case 常量1: 当表达式的值等于常量1, 就执行…

FreeRTOS_信号量_学习笔记

信号量的特性 消息队列用于传输多个数据&#xff0c;但是有时候我们只需要传递状态&#xff0c;这个状态值需要用一个数值表示。套用队列笔记中的流水线例子&#xff0c;可以理解为流水线上工件的数量。 信号&#xff1a;起通知作用 量&#xff1a;还可以用来表示资源的数量 当…

232转Profinet网关接扫码枪与PLC通讯在物流分拣线上的应用

一、背景 随着生活节奏的加快&#xff0c;网络购物需求非常大&#xff0c;从而造成快递站需要快速提取快递信息已达到快速出站的效果&#xff0c;这就用到了扫码枪&#xff0c;扫码枪作为采集设备&#xff0c;能够迅速准确地读取货物信息。并将数据传输至PLC控制器&#xff0c…

antd design 自定义表头

<template><a-card :bordered"false"><div class"contentWrap"><!-- 查询区域 --><div class"table-page-search-wrapper"><a-form layout"inline" keyup.enter.native"searchQuery">&…

【InternLM实战营第二期笔记】03:“茴香豆“,搭建你的 RAG 智能助理(未完成)

文章目录 笔记-RAG课程结构为什么要用 RAG&#xff1f;定义工作原理向量数据库RAG 工作流程发展历程常见优化RAG vs 微调LLM 优化方法比较RAG的评价总结 笔记-茴香豆什么是茴香豆茴香豆实战 笔记-RAG 课程结构 为什么要用 RAG&#xff1f; 新增知识&#xff0c;尤其是高频变动…

利用开源工具创建WEBGIS应用

在本文中&#xff0c;我们将大致说明利用开源工具如何与服务器交互以构建交互式或动态 Web GIS。 WebGIS 应用程序已成为展示地理数据的重要模式。我们现在拥有允许用户交互的机制&#xff0c;以便用户可以选择数据&#xff0c;甚至修改或添加新数据。 什么是WEBGIS? 通过网络…

三十、openlayers官网示例解析Double click, Drag and Zoom——第二次点击鼠标拖拽缩放地图效果、取消地图双击放大事件

这篇展示了如何在地图上添加第二次按下鼠标移动鼠标实现拖拽缩放地图效果。 官网demo地址&#xff1a; Double click, Drag and Zoom 官网介绍文字的翻译如下&#xff1a; 示例比较简单&#xff0c;直接贴代码&#xff1a; const map new Map({//添加第二次点击拖拽缩放地图i…