2009-11-12 24 views
5

我的工作我的HW计算机架构和我遇到以下问题就来了:这是我的计算机体系结构书中的错误吗?

A = 247
B = 237

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

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

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

我错了吗?

+18

@Perpetualcoder,如果没有什么可以添加为什么麻烦评论?现在已经超出了我可以与教授接触的时间,现在我正在做我的功课。如果这是一个问题,我会跳过它,但看到有很多,我决定问我是否错过了一些东西。 – Teradice 2009-11-12 23:16:17

回答

8

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

+0

是的,这是唯一对我有意义的方法。 – Nosredna 2009-11-12 23:25:33

1

对我来说错了。 8位有符号的二进制补码整数可以在-128到127之间。任何尝试将常数237或247分配给8位有符号二进制补码变量应该会导致错误,具体取决于您的语言。

+0

它在C中没有错误地工作。它也应该 - 如果溢出发生,应该只有一个错误,在这里不是这种情况。简单地将“237”转换成它的位表示,它适合8位。没有什么区别,并将字节分配给0xED – poundifdef 2009-11-12 23:24:07

+0

@rasher:标准将不同意这一点。在不符合底层类型的情况下将unsinged转换为signed值是在结果上指定的实现。但这是一个架构问题。不是C会做什么的问题。 – 2009-11-12 23:48:11

3

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

有点像说,在C:

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

来编译,给你,你会期望基于2的8位值“237”

0

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