2016-01-18 3 views
0

Я пытаюсь изучить двоичную систему чисел и почти очень новую. Я только что закончил какую-то главу о разговоре двоичного номера, добавлении, вычитании и т. Д. С некоторыми основными вещами.Какова важность дополнения 1 и дополнения 2 в двоичном формате?

Но теперь я вижу главу о дополнении 1 и дополнении 2. Я знаю, что такое подписанное число, знаковая величина и как двоичная цифра хранится в памяти в 8 бит, 16 бит и т. Д. Но проблема в том, что я не мог понять, почему дополнение 1 и дополнение 2. Также почему мы должны использовать дополнение 2 и почему это лучше и т. Д.

Я следую за книгой, в которой есть руководство, чтобы преобразовать в дополнение к 1 и дополнение 2. Но ничто не объясняло, почему дополнение 1 и дополнение 2.

Так что мне нужна помощь, чтобы понять это более глубоко. Любые предложения по книге для системы двоичных номеров и т. Д.

Заранее спасибо Робин

+2

Статьи Википедии для дополнений и двоичных чисел 1 и 2 и ответы на все ваши вопросы и многое другое. –

+1

В частности, [Страница дополнений 2] (https://en.wikipedia.org/wiki/Two's_complement) содержит дословный ответ на ваш вопрос: «Система двух дополнений имеет то преимущество, что фундаментальные арифметические операции сложения, вычитание и умножение идентичны значениям для двоичных чисел без знака (при условии, что входы представлены в одном и том же количестве бит, и любое переполнение над этими битами отбрасывается из результата). Это свойство упрощает реализацию системы и позволяет легко обрабатывать арифметику с более высокой точностью. ' – fvu

+0

* Кодирование * необходимо, чтобы все согласились с тем, что означает набор значений 0 и 1 бит. Наиболее очевидным, если вы хотите представить текст, большинство согласны с тем, что 01000001 означает «A». То же самое относится к числам, вы должны договориться о том, как кодировать отрицательные значения. Они сделали грустную ошибку еще в 1960-х годах, ошибка, которая постоянно преследует этот веб-сайт без всякой видимой причины. Не важно, кроме обучения студентов, что кодирование важно. –

ответ

0

1s дополнение просто побитовое NOT (то есть 001 равно 110), это дает вам два нуля (111 и 000), поэтому вам нужно позаботиться, когда вы выполняете дополнения чисел с разными знаками (и когда вы пересекаете 0). Однако очень просто реализовать отрицание в оборудовании (это одна параллельная операция).

2s дополняет диапазон, поэтому у вас есть еще один отрицательный результат, чем у вас есть положительные числа (для 8-битных чисел ваш диапазон от -128 до 127), но вам не нужно ничего учитывать, и вы только имеют один ноль. Отрицание числа немного дороже (один параллельный бит-флип, за которым следует добавление), но это, вероятно, компенсируется гораздо более простой схемой добавления.

Знак-бит просто использует старший бит для обозначения отрицательного или положительного. Он имеет по существу все недостатки 1-го дополнения. Очень просто отменить число (перевернуть бит)

Есть также номера смещений, где число «все бит 0» на самом деле означает «самое отрицательное число» и «только самый старший бит 0» означает «номер нуль". Это может быть привлекательным, если, например, вы используете число для управления перемещением чего-то физического (все нули находятся на одном конце, все все пути к другому и «ноль» находится посередине) ,

+0

Большое спасибо за ваш отличный ответ. После решения многих проблем математики в бинарнике мой опыт таков: в нормальном бинарном дополнении хорошо работает при работе с 2 положительными числами или без знакового бита. Но при выполнении сложения или вычитания с отрицательными числами, которые имеют отрицательные знаковые биты, возникают проблемы. Но можно решить любой метод сложения или вычитания с помощью метода комплемента 2. –

0

1 дополнением просто побитовое НЕ ворота, т.е. 1011 становится 0100.

2 дополняет является наиболее часто используется для представления целых чисел, потому что он подчиняется правилам сложения и вычитания. Если вы добавите 1 к 1111, вы получите 0000. Следовательно, 1111 должно быть -1.

+0

Спасибо за ясный ответ –

0

Вы можете использовать любую систему, но некоторые из них имеют недостатки или преимущества.

1 дополнение является очень простым для понимания, но не обеспечивает равномерной арифметики (если вы хотите добавить два номера, вы должны различать разные случаи в зависимости от знаков операндов), поэтому реализовать его в аппаратных средствах слишком дорого. Другой проблемой является существование двух 0 (отрицательных и положительных).

2 дополнение немного сложнее понять, но обеспечивает очень простую равномерную арифметику, вам просто нужно добавить числа так же, как и любой знак числа (например). Таким образом, его внедрение приводит к более дешевому/меньшему оборудованию.

+0

Большое спасибо –

Смежные вопросы