二进制除法问题可以使用长除法来解,无论是自学这类问题的解法,还是写一个简单的计算机程序,长除法都非常实用。另外,多次相减补数法也可以用来解二进制除法问题,但你可能不太熟悉,它在编程中的使用频率也不如长除法。[1] 机器语言通常使用估计算法来提高效率,但这不在本文的论述范围以内。[2]

方法 1
方法 1 的 2:

使用长除法

  1. 回顾十进制的长除法十进制是以10为基数的数制,我们日常使用的数字都是十进制数字。如果你已经很久没有做过长除法,不妨利用算题172 ÷ 4来复习一下。如果你对这部分的内容十分熟悉,请直接跳到下一步,学习二进制的长除法。
    • 被除数除以除数,所得结果为
    • 比较除数和被除数的首位数。如果除数比较大,就继续将下一位数加到被除数中,直至被除数大于除数。例如,用172 ÷ 4时,我们会比较4和1,发现4 > 1后,就比较4和17。
    • 在比较的被除数的最后一位上写下商的首位数。比较4和17,我们发现17整除4得4,因此,我们将商的首位数4写到7的上面。
    • 相乘和相减后得到余数。用商的位值乘以除数,本题中即4 x 4 = 16。在17下面写16,然后用17 - 16,得到余数1。
    • 重复。再次将除数4与余数1比较,发现4 > 1,“结合”被除数的下一位数,然后比较4和12。12是4的三倍,而且没有余数,所以将3写作商的下一位数。答案是43。
  2. 以10101 ÷ 11为例。将问题写成长除法形式,以10101为被除数,11为除数。在上面留出空处写商,下面写下计算过程。
  3. 二进制长除法的解题方法与十进制长除法一样,但实际上前者要简单得多。整除被除数时,每一位的结果要么等于0,要么等于1:
    • 11 > 1,所以1“无法”整除11。在商的第一位,也就是被除数首位数字的上方,写一个0。
  4. 以下是例题后面的计算步骤:
    • 结合被除数的下一位数。11 > 10。在商的位置再写一个0。
    • 结合下一位数。11 < 101。在商的位置再写一个1。
  5. 和十进制的长除法一样,我们用刚刚算出的1乘以除数11,然后将结果与刚才计算中被除的几位数对齐,写到被除数下面。在二进制中,由于1乘以除数总是等于除数,我们可以将之简化:
    • 在被除数下面写下除数。这里,我们将11与被除数的前三位数101对齐,写到它的下面。
    • 计算101 - 11,得到余数10。如果需要复习二进制数的减法运算,可以参阅本网站的相关文章。
  6. 将被除数的下一位数与余数结合,得到100。由于11 < 100,所以在商的下一位数写1。使用之前的方法,继续计算:
    • 在100下面写11,相减得到1。
    • 结合被除数的最后一位数,得到11。
    • 11 = 11,所以商或答案的最后一位数写1。
    • 没有余数,因此问题得到解决。答案是00111,或者简化成111。
  7. 有时,结果不是整数。如果使用最后一位数后仍有余数,就在被除数后面加”.0”,在商里面加”.”,这样,你可以再次结合下一位数,并继续计算。重复这一步骤,直至答案足够精确,然后四舍五入。在纸上计算时,你可以去掉最后一位数的0,取整,如果最后一位数是1,就去掉这个1,然后在新的最后一位数字上加1。在编程中,请遵循某种四舍五入的标准算法,以避免在二进制数和十进制数之间转换时出错。[3]
    • 二进制除法的结果通常包含循环小数,这种情况比十进制数制多。[4]
    • 由于“小数点”(decimal point)只用于十进制,所以在任何其他数制中,我们会使用更通用的术语“小数点”(radix point)。[5]
    广告
方法 2
方法 2 的 2:

使用补数法

  1. 在任何数制中,解除法问题时,我们都可以用被除数减去除数,然后用余数减去除数,同时计算在得到负数之前相减的次数。我们以十进制的除法问题26 ÷ 7为例:
    • 26 - 7 = 19 (减1次)
    • 19 - 7 = 12 (2)
    • 12 - 7 = 5 (3)
    • 5 - 7 = -2。得到负数,所以回到上一步。答案是3,余数为5。注意,这种方法无法计算答案的非整数部分。
  2. 2
    学习用补数法做减法。虽然你可以很方便地在二进制中使用上述方法,但做减法时,我们可以使用效率更高的方法,从而省下编程计算机来计算二进制数字除法的时间。这种方法就是二进制的补数减法。我们举一个简单的例子,计算111 - 011,计算前请确保两个数字的长度相同:
    • 将第二项的每一位数字减1,计算一补数。在二进制中,我们可以把1变成0,把0变成1,非常方便地完成这一步。[6] [7] 本例题中,011变成了100。
    • 用结果加一:100 + 1 = 101。它被称为二补数,让我们像做加法一样去解减法问题。[8] 从本质上讲,这种方法是加一个负数,而不是减一个正数。
    • 将结果与第一项相加。写下问题的解:111 + 101 = 1100。
    • 去掉进位数。去掉答案的第一位数,得到最终结果。1100 → 100
  3. 3
    结合以上两个概念。现在你知道了解除法问题的减法方法,以及解减法问题的二补数方法。使用以下步骤,你可以将它们结合成一种方法,来解除法问题。[9] 如果愿意,在继续浏览前你可以试着自己思考一下。
  4. 以100011 ÷ 000101为例。第一步是计算100011 - 000101,我们可以使用二补数方法,将它变成一个加法问题:
    • 000101的二补数 = 111010 + 1 = 111011
    • 100011 + 111011 = 1011110
    • 去掉进位数 → 011110
  5. 在计算机程序中,这时会为商加一。纸上计算时,在某个角落做个记号,避免与其他计算工作混淆。我们已经成功地减了一次,所以目前为止,商是1
  6. 上次计算的结果是“减去”一次除数后剩下的余数。每次继续加上除数的二补数并去掉进位数。每减一次,为商加一,直至余数小于等于除数。[10]
    • 011110 + 111011 = 1011001 → 011001 (商 1+1=10)
    • 011001 + 111011 = 1010100 → 010100 (商 10+1=11)
    • 010100 + 111011 = 1001111 → 001111 (11+1=100)
    • 001111 + 111011 = 1001010 → 001010 (100+1=101)
    • 001010 + 111011 = 10000101 → 0000101 (101+1=110)
    • 0000101 + 111011 = 1000000 → 000000 (110+1=111)
    • 0小于101,所以我们就此打住。商 111是这道除法题的答案。余数是减法最后所得的结果,在本题中,等于0,即没有余数。
    广告

小提示

  • 除了确定答案的正、负以外,其他时间可以忽略掉计算前二进制数前面的符号位。
  • 如果数字的位数不同,则不能使用减法的二补数法。在较小的数字前面加0即可。
  • 在对机器指令集应用任何二进制算术前,必须考虑增量、减量或弹出堆栈的指令。
广告

关于本wikiHow

Grace Imson, MA
共同创作者是 :
数学教师
这篇文章的共同创作者是 Grace Imson, MA. Grace Imson是一位拥有逾40年教学经验的数学老师。她目前是美国旧金山城市学院的数学老师,之前曾在圣路易斯大学的数学系就职。Grace教过小学、初中、高中和大学水平的数学。她拥有圣路易斯大学的教育文学硕士学位,专攻教育管理与监督。 这篇文章已经被读过64,006次。
广告