Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции РАЗДЕЛ 2.docx
Скачиваний:
78
Добавлен:
18.11.2019
Размер:
3.01 Mб
Скачать

2.3. Машинные коды

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

 свести операцию вычитания к операции сложения;

 автоматически получать знак суммы (разности);

 выявлять переполнение разрядной сетки.

Существуют следующие коды:

 прямой (ПК);

 обратный (ОК);

 дополнительный (ДК).

2.3.1. Прямой код

Для хранения целых чисел со знаком отводится две ячейки памяти (16 бит), причем старший (левый) разряд отводится под знак числа – если число положительное, то в знаковый разряд записывается 0, если число отрицательное записывается 1.

Представление в компьютере положительных чисел с использованием формата «знак-величина» называется прямым кодом числа. Например, число 200210 = 111110100102 будет представлено в 16-ти разрядном представлении следующим образом:

0

0

0

0

0

1

1

1

1

1

0

1

0

0

1

0

При представлении целых чисел в n-разрядном представлении со знаком максимальное положительное число (с учетом выделения одного разряда на знак) равно:

.

2.3.2. Обратный код

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

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

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

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

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

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

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

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

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

Пример 2.3. Записать дополнительный код отрицательного числа –2002 для 16-ти разрядного компьютерного представления.

Решение.

Прямой код

|-200210|

1 0000111110100102

Обратный код

инвертирование

1 1111000001011012

прибавление единицы

1 1111000001011012

+ 00000000000000012

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

1 1111000001011102

Пример 2.4. Выполнить арифметическое действие в машинном коде.

Решение. Представим положительное число в прямом, а отрицательное число в дополнительном коде:

Десятичное число

Прямой код

Обратный код

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

3000

0 000101110111000

-5000

1 001001110001000

1 110110001110111

1 110110001110111

+ 000000000000001

1 110110001111000

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

3000-5000

0 000101110111000

+1 110110001111000

1 111100000110000

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

1. Инвертируем дополнительный код: 0000011111001111;

2. Прибавим к полученному коду 1 и получим модуль отрицательного числа:

0000011111001111

+ 0000000000000001

0000011111010000

3. Переведем в десятичное число и припишем знак отрицательного числа: -2000.

Положительные числа в дополнительном коде записываются так же, как и в прямом. Нуль в дополнительном коде имеет единственное представление:

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