5

我正在研究用于计算机体系结构的硬件,但遇到了以下问题:

A = 247
B = 237

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

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

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

我在这里错了吗?

4

4 回答 4

8

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

于 2009-11-12T23:21:05.877 回答
3

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

有点像在 C 中说:

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

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

于 2009-11-12T23:21:32.317 回答
1

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

于 2009-11-12T23:13:55.547 回答
0

If the problem was "assume that A and B are stored in an 8 bit signed integer", then it would make sense. Storing A = 247 in a signed 8 bit integer yields a value of -9, storing B = 237 yields a value of -19. Otherwise, it doesn't make sense. A signed 8 bit integer cannot have a value of 247 or 237.

于 2014-03-30T01:02:43.923 回答