Представление целых чисел: прямой код, код со сдвигом, дополнительный код — различия между версиями
Полуэктов (обсуждение | вклад) |
Полуэктов (обсуждение | вклад) (→Код со сдвигом) |
||
Строка 13: | Строка 13: | ||
== Код со сдвигом == | == Код со сдвигом == | ||
+ | Код со сдвигом почти не отличается от прямого кода, за исключением представления в нем отрицательных чисел и нуля. | ||
+ | Нуль в отличии от прямого кода в коде со сдвигом единственен. | ||
+ | В 8 битной кодировке: | ||
+ | *нуль 10000000 | ||
+ | *Положительные числа последовательно кодируются от 10000001 до 11111111 | ||
+ | *Отрицательные от 00000000 до 01111111 (при этом 00000000- наименьшее отрицательное число, а 01111111=-1) | ||
== Дополнительный код == | == Дополнительный код == |
Версия 21:03, 26 октября 2010
Прямой код
При записи числа в прямом коде старший разряд является знаковым разрядом. Если его значение равно 0 — то число положительное, если 1 — то отрицательное. В остальных разрядах (которые называются цифровыми разрядами) записывается двоичное представление модуля числа.
Применение прямого кода
Прямой код используется в основном только для записи неотрицательных чисел, т.к. получить прямой код такого числа достаточно просто. Однако, у прямого кода есть ряд недостатков:
- в прямом коде существует два нуля ("+" и "-" ноль)
- крайне неудобно выполнять арифметические операции с отрицательными числами
Из-за недостатков выполнение арифметических операций над числами в прямом коде потребует сложной архитектуры центрального процессора и в общем является неэффективным.
Код со сдвигом
Код со сдвигом почти не отличается от прямого кода, за исключением представления в нем отрицательных чисел и нуля. Нуль в отличии от прямого кода в коде со сдвигом единственен. В 8 битной кодировке:
- нуль 10000000
- Положительные числа последовательно кодируются от 10000001 до 11111111
- Отрицательные от 00000000 до 01111111 (при этом 00000000- наименьшее отрицательное число, а 01111111=-1)
Дополнительный код
Для представления отрицательных чисел используется дополнительный код. Дополнительный код позволяет заменить арифметическую операцию вычитания операцией сложения, что существенно упрощает работу процессора и увеличивает его быстродействие.
Дополнительный код отрицательного числа А, хранящегося в n ячейках, равен
- |A|.Дополнительный код представляет собой дополнение модуля отрицательного числа А до 0, так как в n-разрядной компьютерной арифметике:
- |А| + |А| = 0,
поскольку в компьютерной n-разрядной арифметике
= 0. Действительно, двоичная запись такого числа состоит из одной единицы и n нулей, а в n-разрядную ячейку может уместиться только n младших разрядов, то есть n нулей.Для получения дополнительного кода отрицательного числа можно использовать довольно простой алгоритм:
1. Модуль числа записать в прямом коде в n двоичных разрядах.
2. Получить обратный код числа, для этого значения всех битов инвертировать (все единицы заменить на нули и все нули заменить на единицы).
3. К полученному обратному коду прибавить единицу.