logo
Кафедра “Системы автоматического управления”

4.2 Двоичный формат.

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

В случае беззнаковых чисел, все разряды используются для хранения кода числа. Каждый разряд имеет свой вес - р, определяемый его номером - i. Соотвествие между номером разряда и его весом определяется зависимостью:

P=2i ; где i = 1,2,3…, n-1; n- число разрядов двоичного кода.

Для восьмиразрядного двоичного числа указанное соответствие показано на рис.4.1.

Рис.4.1

Позиции бит пронумерованы от 7 до 0, а веса двоичных позиций показаны в основании ячейки памяти, т.е. бит 7 имеет вес 27 =128, бит 6 - вес 26 =64 и т.д.

В соответствии со значением веса разрядов можно осуществить преобразование числа из 2 с/с в 10 с/с:

(4.1)

Например: 01000010(2) =1* 64 + 1* 2 = 66(10)

Обратный переход от 10 с/с к 2 с/с осуществляется делением исходного числа на основание новой с/с, т.е. на 2, остатки от деления последовательно будут формировать разряды двоичного числа, начиная с младшего.

Например:

66:2 = 33 остаток 0

33:2 = 16 остаток 1

16:2 = 8 остаток 0

8:2 = 4 остаток 0

4:2 = 2 остаток 0

2:2 = 1 остаток 0

1:2 = 0 остаток 1

Таким образом получаем: 01000010

Рассмотрим теперь, каким образом представляются числа со знаком.

При записи числа со знаком в двоичном коде, старший бит, как правило, отводится для хранения знака, при этом 0 - соответствует положительное число, а 1 - отрицательное. Типовая структура байта для размещения чисел со знаком показана на рис.4.2.

Рис.4.2.

В обоих случаях бит 7 является знаковым. Он указывает, является ли число отрицательным или положительным.

Если число положительное, то оставшиеся ячейки памяти содержат двоичное 7-ми разрядное число в прямом двоичном коде. Таким образом максимальное положительное число, которое может быть записано при помощи такого формата будет равно:

01111111(2) = 127(10)

Несмотря на свою простоту, использование прямого кода для записи отрицательных чисел имеет несколько существенных недостатков:

- наличие двух нулей (ноль отрицательный и ноль положительный);

- минимальное число –127 (для восьми разрядного кода), в результате вместо полных 256 комбинаций имеем 255;

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

В связи с этим, для представления отрицательных чисел в ЦВУ используется как правило дополнительный код, преобразование к которому осуществляется по зависимости:

(4.2)

где а – абсолютное значение числа, n - число бит, используемых для его представления.

Преобразование прямого кода записи двоичного числа в дополнительный выполняется в два этапа:

1. получение инверсного или обратного кода (дополнение до 1) путем инвертирования каждого разряда исходного кода;

2. прибавление 1 к полученному обратному коду (дополнение до 2).

Рассмотрим пример.

Дано десятичное число 9 , необходимо найти его дополнительный код.

Двоичное число в прямом коде — 00001001,

в инверсном коде — 11110110,

дополнение до 2 — 11110111.

Таким образом, получен дополнительный код 11110111.

Аналогичный результат получится при непосредственном использовании формулы преобразования (n = 8):

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

Пример: 11110111 - дополнительный код

00001000 - инверсный код

00001001 - прямой код.

Т.о. получим число 9, которое является отрицательным, т.к. значение старшего бита равно 1.

Достоинства применения дополнительного кода для представления отрицательных чисел заключается в том, что:

1. нулю соответствует один код - 00000000;

2. min число 10000000 1111111

+ = 10000000

1

будет - 128, а не -127 как при использовании прямого кода;

3. позволяет использовать сумматоры для реализации всех арифметических операций.

Рассмотрим сложение положительных чисел:

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

Известно, что максимальное число, которое может быть представлено n-разрядным двоичным кодом равно 2n-1. Следующему числу будут соответствовать значения 0 во всех n-разрядах (которые отведены под число) и 1 в n + 1 разряде. Таким образом, если для представления числа а использован n-разрядный двоичный код, то его n – разрядное значение не изменится, если к а добавить число 2n , т.е.

(4.3)

Допустим теперь, что необходимо найти разность чисел, записанных в прямых двоичных n-разрядных кодах:

В соответствии с (4.3)) указанная разность может быть преобразована к виду:

Разность (2n- b) - есть ничто иное, как дополнительный код числа b, т.е. b'. При сложении складываются и двоичные цифры знаковых разрядов с отбрасыванием возникающего при этом разряда переноса. Таким образом, используя дополнительный код, сумматор МП осуществляет операции вычитания.

Примеры:

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

Аналогично выполняется и операция деления чисел, представленных в двоичном формате.

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

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