371 .两整数之和

2023-11-11

371 .两整数之和

  • 地址:https://leetcode-cn.com/problems/sum-of-two-integers/

  • 题目:不使用运算符 +- ,计算两整数 ab 之和。

  • 示例:

    示例1:
    	输入: a = 1, b = 2
    	输出: 3
    
  • 思路:位运算

    • 观察位运算中的加法
      • 0+0=0
      • 0+1=1
      • 1+0=0
      • 1+1=0(进位1)
    • 可以发现,在位运算中的加法(不考虑进位1)就是异或运算的结果。
    • 但是仅仅有异或运算是不够的,我们还需要知道,何时发生了进位,这就需要用到&运算(注意到:&运算得到的进位1需要移1位来得到实际真实的进位).
  • 总结:

    • 1.a+b的问题可以拆分为,(a+b的无进位结果)+(a+b的进位结果)
    • 2.无进位结果通过异或算出
    • 3.有进位结果通过&算出
    • 4.循环此过程,直到进位为0.(此时,异或运算已经得到了最终结果,所以直接跳出循环。)
  • 代码:

    • class Solution {
      public:
          int getSum(int a, int b) {
              while(b)
              {
                  int c=(a&b)<<1;
                  a=a^b;
                  b=c;
              }
              return a;
          }
      };
      
  • 代码出现的问题:

    忽略的重点,常见易错点

  • 这里回顾一下C++的左移操作

    • shift-expression >> additive-expression
    • 左移运算符使shift 表达式中的位向左移动由加法表达式指定的位置数。 因移位运算而空出的位上将用零填充。 左移是逻辑移动(从末端移掉的位将被舍弃,包括符号位)。 有关位移位种类的详细信息,请参阅按位移位
  • 问题:当a和b都为负数时,此时a&b符号为1,移位时会发生溢出,导致错误。(因编译器的不同会发生不同的状况,或许不报错,但是实质上是错误行为。)

  • 所以使用unsigned强制转换:

  • 代码:
    #include<iostream>
    using namespace std;
    class Solution {
    public:
        int getSum(int a, int b) {
            while(b)
            {
                int c=(unsigned int)(a&b)<<1;
                a=a^b;
                b=c;
            }
            return a;
        }
    };
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

371 .两整数之和 的相关文章

随机推荐

  • unix网络编程源代码编译

    最近开始研究unix网络编程 正所谓 学习网络编程的最好方法就是下载这些程序 对其进行修改和改进 只有这样才能深入理解与有关概念和方法 1 首先下载源代码 不多说了 2 照着readme中的步骤往下做 第一步就出现问题了 输入命令 conf
  • 数据结构 堆树(最大堆、最小堆)

    一 堆树的定义 1 堆树是一颗完全二叉树 2 堆树中某个节点的值总是不大于或不小于其孩子节点的值 3 堆树中每个节点的子树都是堆树 当父节点的键值总是大于或等于任何一个子节点的键值时为最大堆 也称大根堆 当父节点的键值总是小于或等于任何一个
  • casting java_Java学习14-对象类型转换(Casting)

    基本数据类型的Casting 1 自动类型转换 小的数据类型可以自动转换成大的数据类型 如long g 20 double d 12 0f 2 强制类型转换 可以把大的数据类型强制转换 casting 成小的数据类型 如 float f f
  • 【QT开发笔记-基础篇】

    本节对应的视频讲解 B 站 链 接 https www bilibili com video BV19B4y1s7YF 由于 QWidget 类是所有控件类的父类 因此本节课先讲解 QWidget 所有窗口类的基类 Qt 中有 3 个窗口的
  • DTH11温湿度传感器使用(stm32)

    可以参考这个博客 https blog csdn net qq 27508477 article details 83661672 但是由于stm32f103很难得到1us的时钟 而且使用HAL库没有直接的寄存器操作 所以需要一定的修改 这
  • 爬取新浪股票财务数据

    coding utf 8 import HTMLParser import urllib2 import sys type sys getfilesystemencoding 截止日期 每股净资产 每股收益 每股现金含量 每股资本公积金 固
  • ORACLE数据块

    下午在学习oracle 10g r2 concepts 在这留一笔 Oracle对数据库数据文件 datafile 中的存储空间进行管理的单位是数据块 data block 数据块是数据库中最小的 逻辑 数据单位 与数据块对应的 所有数据在
  • windows 10下vue 2.x 环境安装(npm网络环境不好时)

    windows 10下vue 环境安装 项目建立和运行 文章目录 windows 10下vue 环境安装 项目建立和运行 确定nodejs和npm已经安装 安装cnpm 安装vue 建立vue项目 使用vscode打开项目cnpm安装依赖
  • 一、OSI参考模型

    一 OSI参考模型 OSI Open System Interconnect 即开放式系统互连 一般都叫OSI参考模型 是ISO组织在1985年研究的网络互连模型 该体系结构标准定义了网络互连的七层框架 物理层 数据链路层 网络层 传输层
  • VMWare虚拟机文件夹共享不生效解决方法

    VMWare虚拟机文件夹共享不生效解决方法 mnt hgfs 中找不到共享文件夹 在安装了 vm tools 或 网上各种教程 vmhgfs fuse 都挂载不上可采取以下临时解决方法 1 关闭VMWare中的文件夹共享 2 重启虚拟机 3
  • nginx中健康检查(health_check)机制深入分析

    转自 https segmentfault com a 1190000002446630 很多人都知道nginx可以做反向代理和负载均衡 但是关于nginx的健康检查 health check 机制了解的不多 其实社区版nginx提供的he
  • 合宙Air724UG LuatOS-Air LVGL API控件--图表 (Chart)

    图表 Chart 一幅图胜过一千个字 通过图表展示出的数据内容能让用户更快速有效的了解数据特征 代码示例 创建图表 chart lvgl chart create lvgl scr act nil lvgl obj set size cha
  • 从零开始做单相逆变电源(硬件)

    文章目录 前言 一 主要模块需求 1 全桥模块 2 采样电路 光耦 前言 题目 单相正弦逆变电源 具体软件部分请参照从零开始做单相逆变电源 软件 一 主要模块需求 本系统以TM4C123GH6PM单片机 FPGA为控制核心 基于正弦脉冲宽度
  • 1654. 到家的最少跳跃次数

    文章目录 Tag 题目来源 题目解读 解题思路 实现细节 实现代码 复杂度分析 写在最后 Tag 广搜 上限证明 图论 题目来源 1654 到家的最少跳跃次数 题目解读 找到从位置 0 跳跃到位置 x 的最小跳跃次数 跳跃规则如下 前进方向
  • daytime协议的服务器和客户端程序,用Socket套接字实现DAYTIME协议的服务器和客户端程序-20210414073352.docx-原创力文档...

    用Socket套接字实现 DAY TIME 协议的服务器和客户端程序 一 设计目的 为了提高同学的自主动手能力 把理论知识运用于实 践中 从实践中更好的领悟所学的知识 二 题目要求及需求分析 网络I O程序设计 用Socket套接字实现DA
  • void指针的用法

    指针有两个属性 指向变量 对象的地址和长度 但是指针只存储地址 长度则取决于指针的类型 编译器根据指针的类型从指针指向的地址向后寻址 指针类型不同则寻址范围也不同 比如 int 从指定地址向后寻找4字节作为变量的存储单元 double 从指
  • quillEditor富文本编辑器实现插入视频

    quillEditor富文本编辑器实现插入视频 quillEditor富文本编辑器实现插入视频默认是通过iframe来展示的 并不符合我们的实际需求 我们需要直接展示视频 这里就是直接展示视频的效果 新建一个video模块用来替换原来vid
  • 云服务器选什么系统

    特网科技是一家领云计算服务提供商 拥有全球性服务 覆盖了超过200个国家和地区 提供多种不同的服务器操作系统 包括常见的Linux和Windows 以及一些非常特殊的OS 如FreeBSD和OpenSUSE 如何选择合适的操作系统对于服务器
  • MySQL安装教程(CentOS7系统)

    MySQL安装教程 1 使用wget指令下载MySQL安装包 指令 wget https dev mysql com get mysql57 community release el7 9 noarch rpm 效果展示 2 使用rpm指令
  • 371 .两整数之和

    371 两整数之和 地址 https leetcode cn com problems sum of two integers 题目 不使用运算符 和 计算两整数 a b 之和 示例 示例1 输入 a 1 b 2 输出 3 思路 位运算 观