1. 题目

不使用运算符 + 和 - ​​​​​​​,计算两整数 ​​​​​​​a 、b ​​​​​​​之和。

示例 1:

输入: a = 1, b = 2
输出: 3

示例 2:

输入: a = -2, b = 3
输出: 1

2. 分析

  在不采用加法和减法的前提下计算两整数之和,这需要使用与运算符和异或运算符,首先,利用与运算 a & b,计算出 a 和 b 所有进位的位置,然后将其左移一位,这样可以得到所有需要进位的值进位后最终的位置。然后利用异或运算 a ^ b,由于异或运算下相同位为0,不同位为1,所以可以获取到 a + b 的不进位下的值。其次,如果是涉及到负数的加法,由于计算机运算都是采用补码,正数的补码为它本身,负数的补码为其取反再加一,符号位不变,所以负数的加法在计算机底层实现的时候与正数的加法是一致的。

  举个例子,6 + 3,转换成二进制就是 110 + 011,计算出需要进位的值 carry 为 (a & b) << 1 = 100, 不需要进位的值 nocarry 为 a ^ b = 101,首先需要判断 carry 和 nocarry 之间相加的情况是否会产生进位,即求出 carry & nocarry 的值是否为 0, 不为 0 的话说明需要再次进位,100 & 101 = 100 不为 0,所以先保存 nocarry 的值到 tmp ,再重新计算 nocarry 的值 即 nocarry = carry ^ nocarry ,然后计算新的 carry 值  carry = tmp & carry,然后再对新的 carry 和 nocarry 进行之前的判断,直到 carry 值为 0,这时返回nocarry即可。

3. 实现

class Solution {
public:int getSum(int a, int b) {int sum = a ^ b;int carry = ((unsigned int)a & b) << 1;while(carry != 0){int tmp = carry;carry = ((unsigned int)sum & carry) << 1;sum ^= tmp;}return sum;}
};

转载于:https://www.cnblogs.com/lawliet12/p/10800905.html

371. 两整数之和相关推荐

  1. LeetCode 371. 两整数之和(异或操作) / 639. 解码方法 II(动态规划)/ 437. 路径总和 III

    371. 两整数之和 2021.9.26 每日一题 题目描述 给你两个整数 a 和 b ,不使用 运算符 + 和 - ​​​​​​​,计算并返回两整数之和. 示例 1: 输入:a = 1, b = 2 ...

  2. leetcode 371. 两整数之和

    leetcode 371. 两整数之和 不使用运算符 + 和 - ​​​​​​​,计算两整数 ​​​​​​​a .b ​​​​​​​之和. 示例 1: 输入: a = 1, b = 2 输出: 3 示 ...

  3. LeetCode【位运算】371. 两整数之和

    不使用运算符 + 和 - ​​​​​​​,计算两整数 ​​​​​​​a .b ​​​​​​​之和. 示例 1: 输入: a = 1, b = 2 输出: 3 示例 2: 输入: a = -2, b = ...

  4. LeetCode 371. 两整数之和(位运算加法)

    1. 题目 不使用运算符 + 和 - ​​​​​​​,计算两整数 ​​​​​​​a .b ​​​​​​​之和. 示例 1: 输入: a = 1, b = 2 输出: 3示例 2: 输入: a = -2 ...

  5. leetcode 371. 两整数之和(不用算术运算符实现两个数的加法:按位异或原理)

    题目 https://leetcode-cn.com/problems/sum-of-two-integers/ 题解 按位异或:相同为0,不同为1 对于二进制的加法运算,若不考虑进位,则 1+1=0 ...

  6. leetcode 371. Sum of Two Integers | 371. 两整数之和(补码运算)

    题目 https://leetcode.com/problems/sum-of-two-integers/ 题解 根据 related topics 可知,本题考察二进制运算. 第一次提交的时候,没想 ...

  7. ​LeetCode刷题实战371:两整数之和

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  8. 不使用 + 和 - 运算符计算两整数之和

    问题概述 不使用运算符 + 和 -,计算两整数之和 思考 不使用 + 和 - ,那就只能想到用位运算来处理了.思路如下: 两数进行 ^(异或运算),可以得到两个数在相同位上数值不同的相加结果 两数进行 ...

  9. ★LeetCode(371)——两整数之和(JavaScript)

    不使用运算符 + 和 - ​​​​​​​,计算两整数 ​​​​​​​a .b ​​​​​​​之和. 示例1: 输入: a = 1, b = 2 输出: 3 示例2: 输入: a = -2, b = 3 ...

最新文章

  1. 关于数据中台的深度思考与总结(超级干货)
  2. 图片浏览(CATransition)转场动画
  3. HttpClient ||GET请求||带参数的GET请求
  4. QT的QOpenGLTexture类的使用
  5. Unity教程之-UGUI美术字体的制作与使用
  6. SAP UI5的support Assistant
  7. JavaIO流加解密,AES对字符串加解密
  8. python字符串查找某个字符_python的字符串
  9. less 、more 翻页显示文件内容
  10. IIS_设置64位机器上的(IIS6/IIS7)兼容32位程序
  11. 作为公共组软件工程师如何工作
  12. SpringMvc从入门到入魔
  13. 沧小海基于xilinx srio核的学习笔记之第五章 Rapidio协议详述
  14. python工具方法 10 h5py批量写入文件、读取文件,支持任意维度的数据
  15. 水星usb无线网卡MW150US驱动 for Mac
  16. 记录人生第一个网站,以及相对路径图片无法显示的问题
  17. 安得与君相决绝,免教生死作相思
  18. Could not find parameter map
  19. 内核I2C子系统详解
  20. Python语言程序设计基础科学计算与可视化小练习

热门文章

  1. 爬取豆瓣电影排名前250部电影并且存入Mongo数据库
  2. jquery form 的beforeSubmit提交前的回调函数
  3. Spring Boot 密码加密的 2 种姿势!
  4. Redis 基础、高级特性与性能调优 | 高薪必备
  5. 一个jstack/jmap等不能用的case
  6. 数据结构—什么是基数排序?
  7. jQuery面试题-区别mouseover和mouseenter的不同之处(看了也许对你有好处)
  8. 上海一百多个数据中心每年消耗全市1.6%的电,将优胜劣汰
  9. 腾讯云上午突发故障 称运营商光缆中断所致
  10. 电池报废征兆,三招辨别该不该换新