【问题标题】:Struggle with binary substraction与二进制减法斗争
【发布时间】:2017-11-28 23:03:59
【问题描述】:

上周我学习了二进制数的算术,尤其是二进制补码的减法,到目前为止这很容易,但有些事情让我有点困扰。为什么借位 1 时 0 - 1 = 1?

当然是-1,但我们应该得到像 1001 这样的结果(大小为 4 位)吗?有人可以解释一下吗?

【问题讨论】:

  • 不是-1;假设你不能得到负面结果;从下一栏中“借用”是避免这种情况的方法。例如,当您尝试执行 21 - 9 时,您计算的是 10 + (11 - 9) 而不是 20 + (1 - 9),这也是同样的原因

标签: math binary


【解决方案1】:

0-1 在二进制中不是 1

0-1 确实 在带符号数字的二进制补码中等于 1。但它的表示确实有很多:你应该得到1111

二进制补码中的负数:

在带符号幅度的两个补码格式(计算机使用)中,保留一位来表示数字的符号。按照惯例,这是最左边的位,其中0 表示正值,1 表示负值。

要获得负数的表示,我们遵循两个步骤:

  1. 翻转所有位
  2. 然后加一

7 的加法倒数:

 7=0111
   1000 // Flip the bits
-7=1001 // Add +1

那么为什么我们减去 0-1 会得到1111

我们如何在二进制补码中做减法?我们通过取 B 的加法逆(相反)并将数字相加来减去 A-B

所以当 A=0 和 B=1 时:

通过反转取加法逆,然后加 1。

 Additive Inverse of B:

 B= 0001
-B= 1110 // Invert
-B= 1111 // Increment +1

现在求和 A + (-B):

     A=0000
(+) -B=1111
-----------
A+(-B)=1111

请注意,如果我们只允许一位。我们不能表示负数,因为该值没有空间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-18
    • 2018-05-23
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多