【问题标题】:Is this a mistake in my Computer Architecture book?这是我的计算机体系结构书中的错误吗?
【发布时间】:2009-11-12 23:12:00
【问题描述】:

我正在研究我的计算机架构硬件,但遇到了以下问题:

A = 247
B = 237

1) 假设 A 和 B 是以二进制补码格式存储的有符号 8 位整数。使用饱和算法计算 A + B。结果应该用十进制写。展示您的作品。
2) 假设 A 和 B 是以二进制补码格式存储的有符号 8 位整数。使用饱和算法计算 A - B。

现在,这些甚至是一个有效的问题吗?我知道什么是饱和算术,但是当它们不能用 8 位二进制补码表示时,说 A 是 247 和 B 是 237 有什么意义呢?

我意识到饱和算术的要点是在上溢/下溢的情况下将所有位设置为极值,但问一系列问题对我来说没有意义(这个问题还有 3 个)同样的问题)涉及不能以它们指定的格式表示的数字的算术。

我错了吗?

【问题讨论】:

  • @Perpetualcoder,如果你没有什么要补充的,为什么还要评论呢?现在已经超出了我可以与教授联系的时间,我正在做作业~现在~。如果这是一个问题,我会跳过它,但看到有很多问题,我决定问我是否遗漏了什么。

标签: computer-architecture


【解决方案1】:

唯一有意义的解释是给出的值是所讨论数字的无符号解释;大于 127 的值显然超出了 8 位有符号二进制补码值的范围。不过,我同意这个问题表述得不好。

【讨论】:

  • 是的,这是唯一对我有意义的方法。
【解决方案2】:

我不知道,但它可能会问:“将十进制数 237 转换为 8 位整数。现在将这些位解释为 8 位 2 的补码整数并将它们相加”。

有点像用 C 语言说的:

char a = 237;
printf("%x %d\n",a, a);

根据 8 位值“237”的 2 补码解释,编译并为您提供您期望的值

【讨论】:

    【解决方案3】:

    我觉得不对。 8 位有符号二进制补码整数可以介于 -128 和 127 之间。任何将常量 2​​37 或 247 分配给 8 位有符号二进制补码变量的尝试都会导致错误,具体取决于您的语言。

    【讨论】:

    • 它在 C 中没有错误地工作。它也应该 - 只有在发生溢出时才会出现错误,这里不是这种情况。 “237”被简单地翻译成它的位表示,它适合 8 位。这与将字节分配给 0xED 没有区别
    • @rasher:标准对此不同意。将 unsinged 转换为不适合基础类型的有符号值是在结果中指定的实现。但这是一个架构问题。不是关于 C 会做什么的问题。
    【解决方案4】:

    如果问题是“假设 A 和 B 存储在一个 8 位有符号整数中”,那么这是有道理的。将 A = 247 存储在带符号的 8 位整数中会产生 -9 的值,将 B = 237 存储会产生 -19 的值。否则,它没有意义。带符号的 8 位整数不能有 247 或 237 的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-14
      • 2014-07-06
      • 1970-01-01
      • 1970-01-01
      • 2017-08-27
      • 2021-10-19
      • 2015-01-19
      相关资源
      最近更新 更多