Это ошибка в моей книге по компьютерной архитектуре? - PullRequest
5 голосов
/ 13 ноября 2009

Я работаю над своим HW для компьютерной архитектуры и столкнулся со следующей проблемой:

А = 247
B = 237

1) Предположим, что A и B являются 8-разрядными целыми числами со знаком, сохраненными в формате дополнения до двух. Рассчитайте A + B, используя насыщающую арифметику. Результат должен быть записан в десятичном виде. Покажите свою работу.
2) Предположим, что A и B являются 8-разрядными целыми числами со знаком, которые хранятся в двоичном формате. Рассчитайте A - B, используя насыщающую арифметику.

Теперь, как же эти вопросы верны? Я знаю, что такое насыщающая арифметика, но как правильно сказать, что A равно 247, а B равно 237, когда они не могут быть представлены 8-битным числом дополнения до двух?

Я понимаю, что смысл насыщенной арифметики в случае переполнения / недостаточного значения, чтобы установить все биты в крайнее значение, но мне не имеет смысла задавать ряд вопросов (есть еще 3 с та же проблема) с использованием арифметики чисел, которые не могут быть представлены в указанном формате.

Я здесь не прав?

Ответы [ 4 ]

8 голосов
/ 13 ноября 2009

Единственная интерпретация, которая имеет смысл, состоит в том, что приведенные значения являются без знака интерпретацией рассматриваемого числа; значения, превышающие 127, явно выходят за пределы диапазона 8-разрядного знакового двойного дополнения. Я согласен с тем, что вопрос плохо сформулирован, однако.

3 голосов
/ 13 ноября 2009

Я не знаю, но может спрашивать: «Преобразуйте десятичное число 237 в 8-разрядное целое число. Теперь интерпретируйте эти биты как 8-разрядное целое число дополнения 2 и добавьте их» .

Вроде как говорят, в C:

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

Который компилирует и выдает значения, которые вы ожидаете, основываясь на интерпретации дополнения до 2 8-битного значения "237"

1 голос
/ 13 ноября 2009

выглядит неправильно для меня. 8-битные целые числа дополнения со знаком 2 могут быть в диапазоне от -128 до 127. Любая попытка присвоить константу 237 или 247 переменной 8-битного знака со знаком два должна привести к ошибке, в зависимости от вашего языка.

0 голосов
/ 30 марта 2014

Если бы проблема заключалась в том, чтобы «предположить, что A и B хранятся в 8-битном целом числе со знаком», то это имело бы смысл. Сохранение A = 247 в 8-разрядном целом числе со знаком дает значение -9, сохранение B = 237 дает значение -19. В противном случае это не имеет смысла. 8-разрядное целое число со знаком не может иметь значения 247 или 237.

...