【LeetCode】:01——不用加号的加法

2020-11-05 10:27:19 浏览数 (1)

代码语言:javascript复制
目录
1. 题
2. 析
    2.1. 位运算
    2.2. 半加器(half adder)
    2.3. 全加器(full adder)
    2.4. 波纹进位加法器 (Ripple Carry Adder)
3. 解    

1. 题

2. 析

2.1. 位运算

2.2. 半加器(half adder)

半加器电路是指对两个输入数据位相加,输出一个结果位(S(Sum))进位(C (Carry out))没有进位输入的加法器电路。是实现两个一位二进制数的加法运算电路。

注:因为没有低位进位,不能进行完整的加法运算,因此这种加法器叫半加器(Half Adder)。

2.3. 全加器(full adder)

全加器是能够计算低位进位的二进制加法电路。与半加器相比,全加器不只考虑本位计算结果是否有进位,也考虑上一位对本位的进位,可以把多个一位全加器级联后做成多位全加器.

2.4. 波纹进位加法器 (Ripple Carry Adder)

将n个全加器级联起来,就是一个n位的加法器,这就是逐级进位加法器。

3. 解

代码语言:javascript复制
/**
 * @param {number} a
 * @param {number} b
 * @return {number}
 */
var add = function(a, b) {
   
   let sum = a ^ b;
   let carry = a & b;

   while(carry != 0){
       carry <<= 1;
       
       a = sum;
       b = carry;

       sum = a ^ b;
       carry = a & b;
   }
   
   return sum;
};

参考:

https://leetcode-cn.com/problems/add-without-plus-lcci/

0 人点赞