2009-11-12 44 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的值。