Представление данных с дополнением до 2

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

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

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


person Josh    schedule 21.03.2012    source источник
comment
Является ли k максимальным количеством битов?   -  person Glenn    schedule 21.03.2012


Ответы (1)


Дополнение до двух — это метод представления отрицательных чисел в двоичном виде. Я не понимаю, как это работает, но это работает, за этим стоит математическая основа. возьмем, к примеру, число 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, применение к нему дополнения до двух даст абсолютное значение. Следовательно: инвертировать (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 битами, то: а) старший бит будет равен 1, и б) если вы хотите использовать более k бит, тогда все биты от исходного старшего бита и слева будут все 1.

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

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

Ваше здоровье

person Israel Unterman    schedule 21.03.2012
comment
Интересно отметить, что применение формулы суммирования бесконечного экспоненциального ряда для вычисления sum[i=0..inf](2^n) дает -1. Таким образом, если рассматривать самый значащий бит как знак, расширенный на бесконечное число битов, компьютерная форма дополнения до двух согласуется с математическим значением двоичных чисел. - person supercat; 17.11.2012