Двоичный пример
Метод дополнений в основном используется в двоичной системе счисления(с основанием 210), так как в двоичной системе счисления дополнение до 1 очень просто получается инверсией каждого бита (заменой '0' на '1' и наоборот) и добавлением единицы, дополнение до 2 может быть сделано симуляцией единицы переноса в младший значащий бит.[1]Например: вычитание 10010— 2210
011001002(x, равное десятичным 10010)
- 000101102(y, равное десятичным 2210)
в методе дополнений становится суммой:
011001002(x)
+ 111010012(первое дополнение y)
+ 12(чтобы получить второе дополнение)
==========
1010011102
После отброса левой (старшей, начальной) «1» получается ответ: 010011102(равное десятичным 7810).
Представление отрицательных чисел в прямом, дополнительном двоичных кодах. [Понятие ограниченной разрядной сетки. Назначение, структура прямого кода, примеры чисел. Назначение, структура, предпосылки к созданию дополнительного кода, порядок формирования чисел в дополнительном коде.]
ограниченная разрядная сетка - это когда число по модулю не может быть больше предельного, например если 4 разряда, то максимальное число, что можно записать = 1111 = 8+4+2+1=15.... Так что если 1111+1 - то будет ПЕРЕПОЛНЕНИЕ
В форме с фиксированной запятой в разрядной сетке выделяется строго определенное число разрядов для целой и для дробной частей числа. Левый (старший) разряд хранит признак знака (0 – "+", 1 – "-") и для записи числа не используется.
Прямой код— способ представлениядвоичныхчиселсфиксированной запятойвкомпьютерной арифметике. Главным образом используется для записиположительных чисел.
При записи числа в прямом коде старший разряд является знаковым разрядом. Если его значение равно 0 — то число положительное, если 1 — тоотрицательное. В остальных разрядах (которые называютсяцифровыми разрядами) записывается двоичное представлениемодулячисла.
Применение прямого кода
В информатике прямой код используется главным образом для записи неотрицательных целых чисел. Его легко получить из представления целого числа в любой другой системе счисления. Для этого достаточно перевести число в двоичную систему счисления, а затем заполнить нулями свободные слева разряды разрядной сетки машины.
Однако, у прямого кода есть два недостатка:
В прямом коде есть два варианта записи числа 0(например, 00000000 и 10000000 в восьмиразрядном представлении).
Использование прямого кода для представления отрицательных чисел в памятикомпьютерапредполагает или выполнение арифметических операцийцентральным процессоромв прямом коде, или перевод чисел в другое представление (например, вдополнительный код) перед выполнением операций и перевод результатов обратно в прямой код (что неэффективно).
Выполнение арифметических операций над числами в прямом коде затруднено: например, даже для сложения чисел с разными знаками требуется кроме сумматораиметь специальный блок-«вычитатель», сложность реализации которого такая же, как и обычногосумматора. Кроме того, при выполнении арифметических операций требуется особо обрабатывать значащий разряд, так как он не имеет веса. Также требуется обработка «отрицательного нуля». Таким образом, выполнение арифметических операций над числами в прямом коде потребует сложной архитектуры центрального процессора и в общем является неэффективным.
0 00011010 - положительное число 1 00011010 – отрицательное число
Гораздо более удобным для выполнения арифметических операций является дополнительный код.
Дополнительный код— наиболее распространённый способ представления отрицательных целых чисел вкомпьютерах. Он позволяет заменить операцию вычитания на операцию сложения и сделать операции сложения и вычитания одинаковыми для знаковых и беззнаковых чисел, чем упрощает архитектуруЭВМ. Дополнительный кодотрицательного числаможно получить инвертированием модуля двоичного числа (первое дополнение) и прибавлением к инверсии единицы (второе дополнение). Либо вычитанием числа из нуля.
Дополнительный код (дополнение до 2) двоичного числа получается добавлением 1 к младшему значащему разряду его дополнения до 1.[1]
Дополнение до 2двоичного числа определяется как величина полученная вычитанием числа из наибольшей степени двух (из 2Nдля N-битного дополнения до 2).