Зачем нужен обратный код?
Обратный код (так же как и дополнительный код) позволяет операцию вычитания заменить операцией сложения → упростить конструкцию арифметическо-логического устройства ЭВМ.
Отрицательные числа при вводе в ЭВМ автоматически преобразуются в дополнительный или обратный коды
Рассмотрим примеры:
Пример №1
Представить в обратном коде число -1
Код исходного числа (в нашем случае: -1)
Знаковый разряд | ||||||||
Обратный код, полученный инверсией всех разрядов, кроме знакового:
Знаковый разряд | ||||||||
Пример №2
Представить в обратном коде число -127
Код исходного числа (в нашем случае: -127)
Знаковый разряд | ||||||||
Обратный код, полученный инверсией всех разрядов, кроме знакового:
Знаковый разряд | ||||||||
Примеры арифметических операций с целыми числами X и Y в обратном коде.
Пример №1 X и Y – положительные
Десятичная система | Двоичная система |
310 + 710 1010 | 0 0000 011 + 0 0000 111 0 0001 010 |
Комментарии:
1. Т.к. оба слагаемых положительные, никаких обратных кодов не пишем.
2. Знаковые разряды положительных чисел равны нулю.
3. Складываем все разряды, в том числе и знаковые.
Пример №2 X> 0, Y<0 |Y|>|X|
Сложение в десятичной системе | 310 + -1010 -710 |
Сложение в двоичной системе:
1. Представим число -10 в обратном коде:
Код модуля числа: 0001 010
Обратный код модуля: 1110 101
2. Складываем:
Знак | ||
Прямой код числа 3 | 0000 011 | |
Обратный код числа -10 | 1110 101 | |
Сумма в обратном коде (обратный код числа -7) | 1111 000 | |
Сумма в прямом коде (получаем инверсией всех разрядов кроме знакового) | 0000 111 |
1 0000 1112=-710 Все верно!
Пример №3 X> 0, Y<0 |Y|<|X|
Сложение в десятичной системе | 1010 + -310 +710 |
Сложение в двоичной системе:
1. Представим число -3 в обратном коде:
Код модуля числа: 0000 011
Обратный код модуля: 1111 100
2. Складываем:
Прямой код числа 10 | 0 0000 010 |
Обратный код числа -3 | 1 1111 100 |
Сумма предварительная в обратном коде: произошло переполнение в знаковом разряде, поскольку 12+12=102 | 0 0000 110 |
Компьютер «исправляет» полученный результат, прибавляя единицу к младшему разряду. | + 0 0000 001 |
Обратный код результата после «исправления» | 0 0000 111 |
0 0000 1112=710 Верно!
Пример №4 X< 0, Y<0
Сложение в десятичной системе | -310 + -710 -1010 |
Сложение в двоичной системе:
1. Представим число -3 в обратном коде:
Код модуля числа: 0000 011
Обратный код модуля: 1111 100
1а. Представим число -7 в обратном коде:
Код модуля числа: 0000 111
Обратный код модуля: 1111 000
2. Складываем:
Обратный код числа -3 | 1 1111 100 |
Обратный код числа -7 | 1 1111 000 |
Сумма предварительная в обратном коде: произошло переполнение в знаковом разряде, поскольку 12+12+12=112 | 1 1110 100 |
Компьютер «исправляет» полученный результат, прибавляя единицу к младшему разряду. | + 0 0000 001 |
Обратный код результата после «исправления» | 1 1110 101 |
1 1110 1012=-1010 Верно!
П.3-4 Возможность переполнение разрядной сетки при сложении переменных целого типа.
При сложении целых переменных может возникнуть ситуация, когда старшие разряды результата операции сложения не помещаются в отведенной для него области памяти. Такая ситуация называется переполнением разрядной сетки формата числа. Для обнаружения переполнения и оповещения о возникшей ошибке в компьютере используются специальные средства.
Рассмотрим пример сложения переменных X>0 и Y>0, когда их сумма X+Y больше или равна 2n-1, где n – количество разрядов формата чисел (для однобайтового формата n=8, 2n-1=27=128):
Десятичная запись | Двоичная запись | |
Первое слагаемое | 6510 | 0 1000 0012 |
Второе слагаемое | 9710 | 0 1100 0012 |
Сумма: получили переполнение | 16210 | 1 0100 0102 |
Старший разряд разряд суммы 16210 = 1 0100 0102 оказывается в знаковом разряде. Это вызывает несовпадение знаков слагаемых и знака суммы: сигнал для ЭВМ об ошибке переполнения.
Практический вывод.
При составлении программного кода необходимо следить, чтобы переменные целого типа получали числовые значения в пределах допустимого для них числового диапазона.
То есть типы целых переменных надо задавать обоснованно. В следующем пункте приводятся типы целых переменных со знаком языка Pascal и соответствующие им допустимые числовые диапазоны.
П.3-5 Названия и параметры целых переменных со знаком в языках программирования
Формат числа (в байтах) | Диапазон | Названия типов | |
Минимальное значение | Максимальное значение | Pascal | |
- 128 | shortint | ||
-32768 | integer | ||
-2147483648 | longint |
П.3-5 Резюме по представлению целых чисел в ЭВМ.