Как добавить два числа в формате знака без преобразования в двоичную форму - PullRequest
1 голос
/ 28 сентября 2019

У меня в Google куча ответов, и я все еще застрял на этих двух вопросах:

3.6. Предположим, что 185 и 122 - это 8-разрядные целые числа без знака.Рассчитайте 185 – 122.Имеется ли переполнение, недостаточность или нет?

3.7. Предположим, что 185 и 122 являются 8-разрядными знаковыми десятичными числами со знаком, которые хранятся в формате знака-величины.Рассчитайте 185 + 122.Есть ли переполнение, недостаточное или нет?

Итак, сначала 3.6: Итак, 185 представляется как 10111001, если это беззнаковое двоичное число.и 122 является 01111010 как число без знака.Когда вы делаете вычитание:

10111001
01111010
00111111

Но я застрял на 3.7.

Так что я думаю, что 185 в подписанном номере - 10111001 = -57.Во-первых это правильно?Но как мне добавить это к 01111010?

Я немного застрял в том, как сделать это другими способами, кроме преобразования в десятичную -> выполнения математических операций -> повторного преобразования ответа в двоичный.Я просматривал Интернет, но не могу найти хороший ресурс ... так как вы добавляете числа, когда они имеют формат со знаком.И для пояснения ... когда мы говорим, что величина со знаком, мы не имеем в виду, что они дополняют или дополняют два.Итак, вопрос 185 + 122. В формате со знаком 185 равен 10111001, а если бит наибольшей величины равен 1, то он отрицательный, поэтому 10111001 = -57.122 это 01111010 = 122. Таким образом, сложение их вместе составляет 65 = 01000001 в двоичном виде.Есть ли способ сделать это без преобразования в десятичную систему и без использования только двоичного кода?

1 Ответ

3 голосов
/ 28 сентября 2019

«В информатике бит знака - это бит в представлении числа со знаком, который указывает знак числа.Только знаковые числовые типы данных имеют бит знака, и его место обычно является самым левым, где находится старший значащий бит в числах без знака.Числа с плавающей точкой в ​​формате IEEE всегда подписываются, причем бит знака находится в крайнем левом положении.Как правило, если бит знака равен 1, то число является отрицательным (в случае двух целых чисел дополнения) или неположительным (для целых чисел дополнения, целых чисел знака и величины и чисел с плавающей запятой), тогда как 0 обозначаетнеотрицательное число »(http://en.wikipedia.org/wiki/Sign_bit)

N битов может представлять - (2 ^ (n-1) - 1) до (2 ^ (n-1) - 1)

СейчасЧто касается вашего вопроса, я бы предложил вам использовать тот же метод, который использовался компьютерами для выполнения вычитания двоичных чисел, например, в добавлении формата дополнения 2 с. Вы можете использовать прямое вычитание, но не рекомендуется.

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

Ответ: 51 и безопасная операция . Как?

185 -> 1011 1001

, так как самый левый бит равен 1, поэтому он отрицательный. Оставьте самый старший бит, который равен 1, что оставляет вас с:

011 1001

Теперь уВы хотите взять дополнение 2, просто переключите каждые 0 на 1 и каждые 1 на 0 и добавьте единицу к результату.Вы получите:

100 0111

Следовательно, 185 -> 1100 0111 (-71) в 8-битном знаковом представлении в соответствии с нашей компьютерной программой.Таким образом, поэтому решение 185 + 122 как 8-битных целых на самом деле -71 + 122 = 51.

185(-71)    ->      1011 1001

+122        ->      1000 0110

-----------------------------

 051        ->      0011 0011

Теперь это может показаться неправильным результатом, но это ограничение использования только 8-битной памятии в соответствии с нашими компьютерами и определением представления битов со знаком это, на самом деле, правильный результат, требуемый в этом случае.

...