我正在研究我的硬件计算机架构,我遇到了以下问题:
A = 247
B = 2371)假设A和B是以二进制补码格式存储的带符号的8位整数。使用饱和算法计算A + B.结果应该用十进制表示。展示你的作品 2)假设A和B是以两个complemnt格式存储的8位整数。使用饱和算法计算A - B.
现在,这些甚至是一个有效的问题怎么样?我知道饱和算术是什么,但是当它们不能用8位二进制补码表示时,A是247而B是237是多少有效?
我意识到饱和算术的意思是在溢出/下溢的情况下将所有位设置为极值但是对我来说问一系列问题是没有意义的(这还有3个问题)同样的问题)涉及不能用他们指定的格式表示的数字算法。
我错了吗?
答案 0 :(得分:8)
唯一有意义的解释是给出的值是对所讨论数字的无符号解释;对于8位有符号二进制补码值,大于127的值显然超出范围。但我同意这个问题说得不好。
答案 1 :(得分:3)
我不知道,但可能会问:“将十进制数237转换为8位整数。现在将这些位解释为8位2的补码整数并添加它们”
有点喜欢说,在C:
char a = 237;
printf("%x %d\n",a, a);
根据8位值“237”的2的补码解释编译并给出您期望的值
答案 2 :(得分:1)
对我来说错了。 8位带符号的二进制补码整数可以在-128和127之间。任何将常数237或247分配给8位有符号二进制补码变量的尝试都会导致错误,具体取决于您的语言。
答案 3 :(得分:0)
如果问题是"假设A和B存储在8位有符号整数"中,那么它是有意义的。在带符号的8位整数中存储A = 247产生值-9,存储B = 237产生值-19。否则,它没有意义。带符号的8位整数的值不能为247或237.