📜  二进制加减法(1)

📅  最后修改于: 2023-12-03 15:06:20.414000             🧑  作者: Mango

二进制加减法简介

二进制加减法是计算机中最基础的计算方式之一,也是进行各种数值计算的基础。本文将向您介绍二进制加减法的概念及其实现方式。

二进制加法

二进制数是由0和1两个数码组成的一种计数系统。在二进制加法中,每一位的计算方法如下:

  • 当两个数码都为0时,结果为0;
  • 当一个数码为0,一个数码为1时,结果为1;
  • 当两个数码都为1时,结果为0,同时向高位进位1。

举个例子,计算二进制数1011和0101的和:

1 0 1 1
  • 0 1 0 1

1 1 0 0 0

因为这两个二进制数的末位都为1,所以相加得到0,并且需要向更高的一位进位1。然后计算倒数第二位,得到1+1=10,因此当前位的结果是0,需要再向更高的一位进位1。再计算倒数第三位,得到0+1=1,因此当前位的结果是1。最后计算最高位,得到1+0+1=10,因此当前位的结果是0,同时也需要向更高的一位进位1。最后的结果是11000,即十进制数24。

二进制减法

在二进制减法中,每一位的计算方法如下:

  • 当被减数小于减数时,需要向更高一位“借位”(借1);
  • 借位之后,该位的结果就是被减数加2再减去减数(即-1+2=1)。

举个例子,计算二进制数1011和0101的差:

1 0 1 1
  • 0 1 0 1

1 0 0 0

首先比较1011和0101,发现高位的1需要向低位“借位”,得到1111。然后计算末尾的两个数码,得到1+2-1=2,因此得到0,向更高的一位转移借位1。继续计算倒数第二位,得到0+2-1=1,因此得到1。再计算倒数第三位,得到1+2-0=3,因此借位0,得到0。最后计算最高位,得到1-0-0=1,即最后的结果为1000,即十进制数8。

代码实现

下面是JavaScript代码实现二进制加减法的示例:

function binaryAddition(a, b) {
  let result = '';
  let carry = 0;
  for (let i = a.length - 1, j = b.length - 1; i >= 0 || j >= 0 || carry > 0; i --, j --) {
    const sum = (i >= 0 ? parseInt(a[i]) : 0) + (j >= 0 ? parseInt(b[j]) : 0) + carry;
    result = (sum % 2) + result;
    carry = Math.floor(sum / 2);
  }
  return result;
}

function binarySubtraction(a, b) {
  let result = '';
  let borrow = 0;
  for (let i = a.length - 1, j = b.length - 1; i >= 0 || j >= 0; i --, j --) {
    let diff = (i >= 0 ? parseInt(a[i]) : 0) - borrow - (j >= 0 ? parseInt(b[j]) : 0);
    borrow = diff < 0 ? 1 : 0;
    diff = borrow ? diff + 2 : diff;
    result = diff + result;
  }
  return result.replace(/^0+/, '') || '0';
}

其中binaryAdditionbinarySubtraction分别代表二进制加法和减法,分别接受两个二进制数的字符串作为参数。实现方式均为模拟人工计算二进制加减法的过程,核心思路参考本文前文所述。