Вычитание двух чисел в формате знака - PullRequest
0 голосов
/ 27 сентября 2019

<Предположим, что 185 и 122 представляют собой 8-разрядные целые числа со знаком, которые хранятся в формате величины знака.Вычислите 185 + 122. Есть ли переполнение, потеря или нет? </p>

Итак, у меня есть 185 = 10111001 в двоичном коде, а у меня 122 = 01111010 в двоичном.

Я не уверен, куда идти отсюда.Если это формат знака, то 10111001 = -57 или -71?

Могу ли я добавить двоичные файлы?

Если я добавлю:

 10111001
 01111010
 _________
100110011

Но это кажетсякак у него переполнение?Я правильно это делаю?

1 Ответ

1 голос
/ 27 сентября 2019

Формат знака-амплитуды использует крайний левый бит для представления знака 0, означающего положительный, и 1, означающего отрицательный, поэтому диапазон чисел, которые мы можем представить с помощью 8-битного формата знака, составляет от -127 до 127.so 10111001 равно -71 (беря дополнение 2 и затем вычисляя значение).

всякий раз, когда в крайнем левом бите есть 1, это означает, что это отрицательное число и для получения необходимой вам величинычтобы получить 2-е дополнение этого.для получения дополнительной информации см. это https://en.wikipedia.org/wiki/Two%27s_complement

, и да, вы можете добавить эти двоичные файлы, а также числа со звездной величиной, если есть перенос из знаковых битов ignore it.поэтому результат, полученный от сложения 100110011, самый левый бит - это перенос битов со знаком, поэтому игнорируйте его.тогда у нас есть 8-битное число 00110011, а крайняя левая цифра равна нулю, так что это положительное число, вычисляющее его величину, мы получаем 51, которое в точности равно 122+(-71).да, возможны также случаи переполнения. Подробнее о переполнении см. здесь: https://www.doc.ic.ac.uk/~eedwards/compsys/arithmetic/index.html#targetText=Overflow%20Rule%20for%20addition,adding%20operands%20with%20different%20signs.

...