两整数之和 ---- 位运算

题目链接

题目:

分析:

  • 题目中要求不能使用+-, 考虑到我们的位运算异或^ , 是无进位加法, 可以使用
  • 如果是无进位加法, 那么我们就要找到进位, 并进行计算, 进位只有1和1相加时才会产生进位1, 而0和1相加无进位, 进位为0, 那么我们就想到了**&**运算, 1&1 = 1, 0&1 = 0, 所以我们只需要将这两个数&, 就能知道有无进位
  • 但是进位是给这一位的前一位加的, 所以我们要继续进行<<1 左移一位的操作
  • 以示例二为例, 2的二进制是010, 3的二进制是011, 那么再进行^时, 结果是001, 进位就是100
  • 接着就需要将进位和异或无进位相加后的结果相加, 还是使用异或运算, 无进位相加,那么结果就是101,结果为5
  • 但是如果我们将进位和异或后的结果再进行异或后, 又产生了进位, 那么我们还要再进行&<<1的操作, 并和结果^ , 直到不再产生进位为止

代码:

java 复制代码
class Solution {
    public int getSum(int a, int b) {
        while(b != 0){
            int x = a ^ b;
            int carry = (a & b) << 1;
            a = x;
            b = carry;
        }
        return a;
    }
}
相关推荐
充值修改昵称几秒前
数据结构基础:B+树如何优化数据库性能
数据结构·b树·python·算法
Cinema KI几秒前
一键定位,哈希桶的极速魔法
数据结构·c++·算法·哈希算法
曾几何时`6 分钟前
二分查找(九)2300. 咒语和药水的成功对数
数据结构·算法
We་ct24 分钟前
LeetCode 12. 整数转罗马数字:从逐位实现到规则复用优化
前端·算法·leetcode·typescript
绿算技术26 分钟前
重塑智算存储范式:绿算技术NVMe-oF芯片解决方案全景剖析
人工智能·算法·gpu算力
sin_hielo39 分钟前
leetcode 3510
数据结构·算法·leetcode
Anastasiozzzz1 小时前
力扣hot100 20.有效的括号 解析
java·算法·面试·力扣
CrazyClaz1 小时前
负载均衡算法
算法·负载均衡
嵌入式小能手1 小时前
飞凌嵌入式ElfBoard-系统信息与资源之休眠
c语言·开发语言·算法
历程里程碑1 小时前
哈希3 : 最长连续序列
java·数据结构·c++·python·算法·leetcode·tornado