Системы внутреннего кодирования целочисленных значений

Прямой код

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

Пусть для внутреннего представления значений целого типа в машинной памяти отводятся ячейки, состоящие из N двоичных разрядов (обычно N выбирается равным 8, 16, 32 и т.д).

Тогда прямым кодом некоторого целого числа А в N разрядной ячейке называют запись числа |A| (т.е.запись модуля А),  в виде N-1 разрядного двоичного числа, слева к которому приписан ещё один,  знаковый двоичный разряд (0- кодирует знак "+",  1 - кодирует знак "-").

При этом, чтобы кодирование было возможно, двоичное представление числа |A| должно, конечно, помещаться в рамки отведённых для него  N-1 двоичных разрядов.

Примеры.

1. N=4, А= 5.    Тогда Апр=  0101;

2. N=4, А= - 5.  Тогда Апр=  1101;

3. N=4, А= - 2.  Тогда Апр=  1010;

4. N=4,  А= -8.   Апр= ?  - представление не возможно, т.к. |A|= 8(10)=1000(2).

В последнем случае, для двоичной записи модуля числа -8 нам потребовалось 4 разряда (т.е. не N-1, а N), и мы вынуждены были занять знаковый разряд отведённой ячейки, что не допустимо!

Разберём пример 3 подробно: А=-2, |A|=2. Переведём 2 в двоичную систему счисления: 210 =102. Т.к. N=4, запишем 10 как трёх-значное:  010. Т.к. число А отрицательное, припишем к 010 слева 1. Окончательно получим Апр=1010 .

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

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

Что же такое дополнительный код? Для неотрицательных и отрицательных чисел он определяется по-разному.

Пусть N, как определено выше, разрядность машинной ячейки. Дополнительный (N-разрядный) код любого неотрицательного целого числа А совпадает с его прямым (N-разрядным) кодом.

Дополнительный (N-разрядный) код любого отрицательного числа А  представляет собой  N-разрядную  двоичную запись разности 2N - |A|.

Безусловно, мы и здесь, строя дополнителный код, должны учитывать ограничения разрядности используемых нами ячеек памяти.  В частности, всегда должно соблюдаться неравенство 2N-1 ›=|A|.

Примеры.

1. N=4, А= 5.    Тогда  Адоп=  0101;

2. N=4, А= - 5.  Тогда  Адоп=  1011;

3. N=4,  А= -8.   Тогда  Адоп= 1000;

4. N=4,  А= -9.   Адоп= ?  - представление не возможно, т.к.  неверно что  24-1 ›= 9.

Замечание1. При указанных нами ограничениях, самый левый бит дополнительного кода числа, как и в прямом коде, несёт информацию о знаке этого числа (см. примеры выше). Но способ восстановления (декодирования) числа А по заданному его дополнительному коду Адоп сложнее, чем в случае использования прямого кодирования. Подумайте, например, как из Адоп=  1011 получить А= -5.

Замечание2. Сравнивая прямое кодирование с использованием дополнителного кода, можно заметить, что диапазоны представимых значений при одном и том же N слегка различаются (см. пример 3). Дополнительный код покрывает несколько более широкий диапазон (на сколько?).

4.6
Your rating: Нет Average: 4.6 (20 votes)

Комментарии

Андрей, Вы это читали?

Андрею А. и не только!

Андрей! Там где я указал, написано:
Дополнительный (N-разрядный) код любого отрицательного числа А представляет собой N-разрядную двоичную запись разности 2 в степени N минус |A|.
Рассмотрим пример 2:
2. N=4, А= - 5. Тогда Адоп= 1011;
Как это получилось?
1) A= -5, значит |A|= 5.
2) 2 в степени N минус |A|, при N=4, это 16-5=11.
3) Изобразим число одиннацать в 2-ичной (т.е. переведём в 2-с.с.), 4-разрядной записи и получим: 1011.
Это и есть ответ.

Теперь прочитал. Теперь

Теперь прочитал. Теперь понятно.

диапазон

Прямой код:
n=4
-6=1110
-7=1111
-8= невозможно т.к. |a|=1000
7=0111
8= невозможно т.к. |a|=1000
=> -7...7

Дополнительный код:
-8=1000
-9= невозможно т.к. 2^3<|-9|
7=0111
8= невозможно т.к. |a|=1000
=> -8...7

у дополнительного кода диапазон шире на одно значение.

ПОЧИТАТЬ О КОДИРОВАНИИ МОЖНО

ПОЧИТАТЬ О КОДИРОВАНИИ МОЖНО ЗДЕСЬ

Демченко Маргарита аватар

Подготовка

Когда будут задачи?)

Александр Белый аватар

да скоро уже, сейчас все

да скоро уже, сейчас все собирутся

Матанин Сергей аватар

ожидаем))

ожидаем))

Александр Белый аватар

Как дела? Готова?

Как дела? Готова?

Станислав Малявкин аватар

Где)

эти задачи где?)

Матанин Сергей аватар

нетерпеливый)

нетерпеливый)