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

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 15: Строка 15:
  
 
Принцип кодирования следующий:
 
Принцип кодирования следующий:
*К кодируемому числу прибавляем <tex> 2^(n-1) </tex>  
+
*К кодируемому числу прибавляем <tex> 2^n-1 </tex>  
 
*Переводим получившееся число в двоичную систему исчисления.
 
*Переводим получившееся число в двоичную систему исчисления.
  
Диапазон значений: [-<tex> 2^(n-1) </tex>;<tex> 2^(n-1)-1 </tex>]
+
Диапазон значений: [-<tex> 2^n-1 </tex>;<tex> 2^n-1</tex>-1]
  
  

Версия 03:44, 25 ноября 2010

Прямой код

При записи числа в прямом коде старший разряд является знаковым разрядом. Если его значение равно 0 — то число положительное, если 1 — то отрицательное. В остальных разрядах (которые называются цифровыми разрядами) записывается двоичное представление модуля числа.

Применение прямого кода

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

  • в прямом коде существует два нуля ("+" и "-" ноль)
  • крайне неудобно выполнять арифметические операции с отрицательными числами

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

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

С помощью кода со сдвигом можно представить [math] 2^n [/math] чисел.

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

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

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


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

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

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

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

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

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

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

1. Модуль числа записать в прямом коде в n двоичных разрядах.

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

3. К полученному обратному коду прибавить единицу.