2-е дополнение представления данных - PullRequest
0 голосов
/ 21 марта 2012

Это вопрос, который я видел в прошлой статье.Я думаю, что понимаю дополнение 10-х, но не понимаю следующий вопрос о комплиментах двух.Кроме того, что комплимент двух имеет отношение к двоичному?

Какое число в базе 10 представлено 1110 в дополнениях 2s с k = 4?Изменится ли ответ, если k = 5?

Пожалуйста, объясните ответ, спасибо за любую помощь!

1 Ответ

2 голосов
/ 21 марта 2012

Дополнение Two - это метод представления отрицательных чисел в двоичном виде.Я не понимаю, как это работает, но это так, за этим стоит математическая основа.Возьмем, к примеру, число 6. В двоичном виде это 0110. Затем, чтобы представить -6, нужно применить к нему алгоритм дополнения до двух.

Алгоритм заключается в копировании всех цифр справа налево.В первый раз, когда вы сталкиваетесь с 1, вы оставляете все как есть, но с этого момента вы инвертируете все цифры по мере продвижения влево.В этом примере давайте пойдем справа налево: сначала у нас есть 0. Затем у нас есть 1. Мы копируем его, поэтому пока имеем 10. Так как мы столкнулись с 1, нам теперь нужно инвертировать все биты.Итак, следующим является 1, мы копируем его как 0, так что теперь у нас есть 010. Крайний левый бит равен 0, поэтому мы инвертируем его в 1 и в результате получаем 1010. Это -6 в 4-значном.Отрицательные числа в дополнении к двум всегда имеют 1 для MSB (самый левый бит - Самый значимый бит).

Прежде чем продолжить, есть короткий путь для преобразования.Вы просто инвертируете все биты, затем добавляете 1 и получаете тот же результат.Если мы инвертируем 0110, мы получим 1001. Добавление 1 дает 1010. Не знаю, как это работает, но работает.

Сколько стоит 8 - 6?Это как 8 + (-6).В дополнение к двум это 1000 + 1010 = 10010

Поскольку мы работаем с 4 цифрами, мы обрезаем MSB и получаем 0010, равное 2, что равно 8 - 6. Это работает.

Если вывозьмите -6 (1010) и снова примените к нему дополнение к двум, вы получите (используя второй метод) инверсию (1010) + 1 = 0101 + 1 = 0110 = 6. Таким образом, применение алгоритма дополнения к двум отрицательным числам показывает их абсолютное значение.

И теперь мы можем перейти ко второй части вашего вопроса: 1110. В мире положительных чисел это 14. Но в работе как положительных, так и отрицательных чисел мы видим, что, поскольку MSB (самый значимый бит) в этом числе равен 1, число отрицательное.Как и в примере -6, применение к нему дополнения до двух даст его абсолютное значение.Следовательно: Invert (1110) + 1 = 0001 + 1 = 0010 = 2. Таким образом, 1110 равен -2.

Я считаю, что k в вопросе - это число цифр.Если k равно 5, то как мы представим -2?

Чтобы ответить, что мы начинаем с 2, представленного в 5 цифрах, а затем применяем преобразование дополнения к двум.

2 - это 00010.он инвертирован (00010) + 1 = 11101 + 1 = 11110.

Можно сделать вывод, что если бы у нас было 8 битов, то -2 было бы 11111110.

Это явление называется расширением знака,Это говорит о том, что если отрицательное число может быть представлено в k битах, то: a) MSB будет равен 1, и b) если вы хотите использовать больше, чем k битов, то все биты из исходного MSB и оставленного будут все1.

И опять за этим стоит математика, чтобы доказать это, с чем я не знаком.

Кстати, вы можете посмотреть на моем сайте.Случилось так, что ваш вопрос касается именно той проблемы, которую я решаю в продукте под названием ChordBits, где вы можете включать и выключать биты, и среди других опций вы можете применить к ним два дополнения и посмотреть, как он выглядит (условно-бесплатная версия полностьюфункциональная). www.codechords.com

Приветствия

...