Бинарное дополнение. Это переполнение?

Двоичные значения представлены в форме 2-секундного дополнения.

Если я должен добавить 110001 (-15) и 101110 (-18), а ответ должен быть сохранен в виде 6-битного целого числа, является ли это недополнением/переполнением.


person xbonez    schedule 27.04.2010    source источник
comment
Да это так. Но я решил это, получил ответ в десятичном виде -33. Поскольку нижний диапазон 6-битного целого числа с дополнением до 2 равен -32, по моему мнению, это потеря значимости, но согласно моему проф. примечания к решению, это не так. Я просто хочу подтвердить.   -  person xbonez    schedule 28.04.2010


Ответы (3)


Это переполнение, ваш профессор прав. Вы сохраняете больше битов, которые можно уместить в выделенном пространстве (даже если число, которое представляют биты, отрицательное).

Недополнение — это когда биты обнуляются из-за сдвига в большой математике. Очень часто встречается в математике с фиксированной точкой. Разделите очень маленькое число на очень большое, и вы довольно часто получите 0. Это потеря значимости.

person Michael Dorgan    schedule 27.04.2010
comment
+1 Вот что я хотел сказать. Underflow — это другая концепция, чаще связанная с математикой с плавающей запятой. - person Andy White; 28.04.2010

Обсуждается хороший пример добавления двух регистров с содержимым -70 и -90 и сохранения его в третьем регистре.

Let's assume R1[8 bits] = -70 R2[8 bits] = -90 Result[9 bits] = -160, an extra bit for overflow.

Этот пример обсуждается на странице overflow_signed_detection по ссылке 1 ниже. С помощью правил, обсуждаемых на этой странице, пример можно масштабировать до любых двух десятичных чисел со знаком.

person Atul    schedule 23.09.2011

РЕДАКТИРОВАТЬ: Я только что понял, что -33 слишком велико для 6 бит, поэтому результат НЕ -33, а +31, и, следовательно, это определенно переполнение :)

Добавление двух чисел и получение правильного результата, если это определенно НЕ переполнение. Примером переполнения является сложение двух отрицательных чисел и получение в результате положительного числа (или наоборот).

Например, если вы добавите два положительных числа 0x7ffffffff и 0x00000001, вы получите отрицательное число 0x80000000, что определенно неверно и, следовательно, переполняется.

Может быть, вы путаете переполнение с переносом?

person fredoverflow    schedule 23.05.2010