Представление целых чисел: прямой код, код со сдвигом, дополнительный код — различия между версиями
Строка 1: | Строка 1: | ||
== Прямой код == | == Прямой код == | ||
− | При записи числа в прямом коде старший разряд является знаковым разрядом. Если его значение равно 0 | + | При записи числа в прямом коде (англ. ''sign-and-magnitude method'') старший разряд (англ. ''most significant bit'') является знаковым разрядом (англ. ''sign bit''). Если его значение равно 0, то число положительное, если 1 — отрицательное. В остальных разрядах (которые называются цифровыми) записывается двоичное представление модуля числа. |
− | + | Получить прямой код числа достаточно просто, однако у этого метода есть ряд недостатков: | |
− | |||
− | |||
− | * | + | *существуют два нуля ("+0" и "-0"), из-за чего усложняется арифметическое сравнение; |
− | * | + | *выполнение арифметических операций с отрицательными числами требует усложнения архитектуры центрального процессора (например, для вычитания невозможно использовать сумматор, необходима отдельная схема для этого). |
− | Из-за | + | Из-за этого прямой код используется в основном только для записи неотрицательных чисел. |
== Код со сдвигом == | == Код со сдвигом == |
Версия 01:49, 19 октября 2011
Прямой код
При записи числа в прямом коде (англ. sign-and-magnitude method) старший разряд (англ. most significant bit) является знаковым разрядом (англ. sign bit). Если его значение равно 0, то число положительное, если 1 — отрицательное. В остальных разрядах (которые называются цифровыми) записывается двоичное представление модуля числа.
Получить прямой код числа достаточно просто, однако у этого метода есть ряд недостатков:
- существуют два нуля ("+0" и "-0"), из-за чего усложняется арифметическое сравнение;
- выполнение арифметических операций с отрицательными числами требует усложнения архитектуры центрального процессора (например, для вычитания невозможно использовать сумматор, необходима отдельная схема для этого).
Из-за этого прямой код используется в основном только для записи неотрицательных чисел.
Код со сдвигом
С помощью кода со сдвигом можно представить
чисел. Суть кода в том, что мы сдвигаем целочисленный отрезок (от нуля до ) влево на , а затем последовательно кодируем получившееся на этом отрезке числа , в порядке возрастания, кодами от 000...0 до 111...1Принцип кодирования следующий:
- К кодируемому числу прибавляем
- Переводим получившееся число в двоичную систему исчисления.
Диапазон значений [
; ]Дополнительный код
Для представления отрицательных чисел используется дополнительный код. Дополнительный код позволяет заменить арифметическую операцию вычитания операцией сложения, что существенно упрощает работу процессора и увеличивает его быстродействие.
Дополнительный код отрицательного числа А, хранящегося в n ячейках, равен
|A|.Дополнительный код представляет собой дополнение модуля отрицательного числа А до 0, так как в n-разрядной компьютерной арифметике:
|А| + |А| = 0,
поскольку в компьютерной n-разрядной арифметике
= 0. Действительно, двоичная запись такого числа состоит из одной единицы и n нулей, а в n-разрядную ячейку может уместиться только n младших разрядов, то есть n нулей.Для получения дополнительного кода отрицательного числа можно использовать довольно простой алгоритм:
- Модуль числа записать в прямом коде в n двоичных разрядах.
- Получить обратный код числа, для этого значения всех битов инвертировать (все единицы заменить на нули и все нули заменить на единицы).
- К полученному обратному коду прибавить единицу.