【问题标题】:Understanding Two's Complement Addition了解二进制补码加法
【发布时间】:2013-04-07 01:57:53
【问题描述】:

我使用 4、1 位全加器构建了一个四位加法器/减法器,输入和输出是二进制补码。

如果X=0111 and Y=1000 他们的总和显然是 1111。

在十进制中,这等于 7 + 8 因此 15 这是总和的结果。

但是我很困惑,如果这个结果需要通过翻转位并加一个来转换回“常规”二进制文件?所以答案将是 0001 代表十进制的 1。翻译前的十进制 Y 实际上是 0110 表示 6,从而产生以下二进制 7-6 = 1。如果有人能指出我正确的方向,我将不胜感激!

【问题讨论】:

    标签: binary addition twos-complement


    【解决方案1】:

    看来您的 Y 转换错误。 Y = 10002 = -810.

    要表示 -6,你取 0110,翻转位得到 1001 并加一,所以 Y = 1010。(如你所料,0111 + 1010 = 0001。)

    要返回,翻转 1010 = 0101 的位并加一,得到 0110 = 6。

    编辑以回答您的后续问题:

    让:

    X = 0111
    Y = 1100
    
    X + Y = 0011 (ignoring overflow)
    

    所以无论我们添加什么,它都等于 3。我们知道 X = 7。

    Y = 1100 => 0011 + 1 = (negative)0100 = -4
    

    7 + (-4) = 3

    无需翻译,正确表示正负数即可。我认为您的困惑来自这样一个事实,即我们正在“否定”负数以找到该数字的绝对值并在其前面加上一个负号,就像上面 Y 的转换一样。这是因为 2 的补码中的负数不像正数那样可读,但 0100 仍然是 +4,而 1100 仍然是 -4。

    【讨论】:

    • 我还是一头雾水。也许这会让它更清楚。查看给定的 x=0111 和 y=1000,总和为 1111,结果 1111 会转换成十进制,而 y 最初的十进制会是什么?
    • 7 - 8 = -1:取 1111,将位翻转到 0000 并加一得到(负)0001。
    • 为了完整起见,1000 是 0111+1 = (negative)1000 或 -8。
    • 啊,非常感谢!也许你愿意再帮我一个?如果我将 x 值保持在 0111 但将 y 更改为 1100,则总和为 0011。按照您的上述程序,我看到 y,1100 应该是 0100 或 4。所以操作应该是 7-4 = 3(在十进制)。 3 由 0011 表示,这是在不通过所描述的 2 的补码过程移动结果的情况下得出的结果。如果前导数字等于1,我只需要翻译吗?还是我还没有得到什么?
    • 所以我想最后一个问题的简短回答是肯定的,只有设置了高(符号)位的数字是负数。尽管您必须小心何时可以忽略溢出。
    猜你喜欢
    • 1970-01-01
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 2012-11-02
    相关资源
    最近更新 更多