Представление целых чисел: прямой код, код со сдвигом, дополнительный код — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 1: Строка 1:
 
== Прямой код ==
 
== Прямой код ==
При записи числа в прямом коде старший разряд является знаковым разрядом. Если его значение равно 0 то число положительное, если 1 — то отрицательное. В остальных разрядах (которые называются цифровыми разрядами) записывается двоичное представление модуля числа.
+
При записи числа в прямом коде (англ. ''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"), из-за чего усложняется арифметическое сравнение;
  • выполнение арифметических операций с отрицательными числами требует усложнения архитектуры центрального процессора (например, для вычитания невозможно использовать сумматор, необходима отдельная схема для этого).

Из-за этого прямой код используется в основном только для записи неотрицательных чисел.

Код со сдвигом

С помощью кода со сдвигом можно представить [math] 2^n [/math] чисел. Суть кода в том, что мы сдвигаем целочисленный отрезок (от нуля до [math] 2^{n} [/math]) влево на [math] 2^{n-1} [/math], а затем последовательно кодируем получившееся на этом отрезке числа , в порядке возрастания, кодами от 000...0 до 111...1

Принцип кодирования следующий:

  • К кодируемому числу прибавляем [math] 2^{n-1} [/math]
  • Переводим получившееся число в двоичную систему исчисления.

Диапазон значений [[math]-2^{n-1} [/math];[math] 2^{n-1}-1 [/math]]

Дополнительный код

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

Дополнительный код отрицательного числа А, хранящегося в n ячейках, равен [math] 2^n-[/math] |A|.

Дополнительный код представляет собой дополнение модуля отрицательного числа А до 0, так как в n-разрядной компьютерной арифметике:

[math] 2^n -[/math] |А| + |А| = 0,

поскольку в компьютерной n-разрядной арифметике [math] 2^n [/math] = 0. Действительно, двоичная запись такого числа состоит из одной единицы и n нулей, а в n-разрядную ячейку может уместиться только n младших разрядов, то есть n нулей.

Для получения дополнительного кода отрицательного числа можно использовать довольно простой алгоритм:

  • Модуль числа записать в прямом коде в n двоичных разрядах.
  • Получить обратный код числа, для этого значения всех битов инвертировать (все единицы заменить на нули и все нули заменить на единицы).
  • К полученному обратному коду прибавить единицу.

Список литературы