执行以下 1 的补码定点整数算术运算

Posted

技术标签:

【中文标题】执行以下 1 的补码定点整数算术运算【英文标题】:Perform the following 1's complement fixed-point integer arithmetic operations 【发布时间】:2012-02-27 01:19:20 【问题描述】:

这个问题来自我的数字逻辑课,但我不明白。请帮助我理解它在问我什么。

假设 A1 和 A2 是八进制简写。

,并注意每种情况下是否发生幅度溢出:(提示:在另一个八进制简写上使用 7 的补码算术),

i) A3= A1+A2 ii) A3= A1-A2

我以为你只在想要做减法时才取补数。我不能只以八进制形式进行减法吗?有人可以帮我理解这些问题是什么吗?

【问题讨论】:

【参考方案1】:

这是一个技巧问题;或者你错误地引用了它。我怀疑你的导师会问前者;所以肯定是后者。

回想一下,1 的补码和是两个操作数(此处为 A1 和 A2)的 XOR。并且在 1s 补码世界中没有进位,因此没有幅度溢出之类的东西。

【讨论】:

我完全复制了它,所以它一定是一个技巧问题。当他说 1 的补码时,这是否意味着我已经反转了 A1 和 A1 二进制的 1 和 0,然后将它们相加?提示使用 7 的补码是什么意思? 忘记 1s 补码中的代数“加”的概念。两个操作数的 1 补码“加法”恰好是“操作数 1 XOR 操作数 2”。我不知道他所说的“7s 补码”是什么意思。也许它与八进制有关,但对我来说这没有意义。我想存在“7s 补码”表示,但我必须相信这是“2s 补码”的错字。 A1 和 A2 不是八进制数,它们的范围是 0-7。如果它们是十六进制,那么可能的八进制表示是 A1: 0241; A2:0242。但即使这样也没有任何意义。【参考方案2】:

我不确定晦涩的“八进制速记”/“7s-complement”如何发挥作用,但这里是“传统”解决方案:

i) A3 = A1+A2
       1
       2631
       84268421
       01000000
    A1=10100001 = -94
  + A2=10100010 = -93
    ------------
    A3=01000011 = -187 < -127 so we know this is wrong 
co:    10100000

  CO = 1 which also indicates result is wrong


ii) A3 = A1-A2
        1000000
    A1=10100001 = -33
  - A2=10100010 = -34
    ------------
    A3=????????? =  1  < 127 so we know this is right
  ==
        0000010
    A1=10100001
  + A2=01011101
    ------------
    A3=11111110 = -67
co:    00000001 = 1

  CO = 0 which also indicates result is right

【讨论】:

以上是关于执行以下 1 的补码定点整数算术运算的主要内容,如果未能解决你的问题,请参考以下文章

算术运算

以太坊虚拟机介绍3-算术运算指令

ALU底层方法及计算机整数加减乘除模拟

C 指针的算术运算

C 指针的算术运算

计算机如何实现运算?