- •1.1.1 Десятичная система счисления
- •1.2 Представление чисел в персональных компьютерах
- •1.2.1 Представление чисел в прямом коде
- •1.2.2 Представление чисел в дополнительном коде
- •Задание 1
- •2)Для числа (-18)
- •Задание 2
- •1) Для числа (-18)
- •1.2.4 Представление чисел с фиксированной точкой
- •2.Число -0.11010001 * 210100 хранится в 32-битном регистре в виде
- •3.Число 0.11010001 * 2-10100 хранится в 32-битном регистре в виде
- •4.Число -0.11010001 * 2-10100 хранится в 32-битном регистре в виде
- •Отрицательная область потери значимости
- •Положительная область потери значимости
- •Положительная область
- •Переполнения
- •Отрицательная область
- •Переполнения
- •Представляемые ожительные числа
- •Представляемые положительные
- •Представляемые отрицательные
- •Исследование представления чисел в оперативной памяти персонального компьютера
- •Технология работы
- •Технология работы
1.2.1 Представление чисел в прямом коде
Простейшим форматом, использующим знаковый разряд, является прямой код ( в английской транскрипции этот формат принято называть sign-magnitude representation – представление в виде абсолютной величины со знаком.
В n - разрядном двоичном слове в общем случае n-1 разрядов представляют абсолютную величину числа.
Пример 5.
(+18)10 - 000100102
(-18)10 - 100100102
Формат представления чисел в прямом коде неудобен для использования в вычислениях. Во-первых сложение и вычитание положительных и отрицательных чисел выполняется по-разному, а поэтому требуется анализировать знаковые разряды всех используемых операндов. Во-вторых, в прямом коде числу 0 соответствуют две различные кодовые комбинации:
(+0)10 - 00000000
(-0)10 - 10000000.
Это серьезно усложняет анализ результата вычислений на равенство нулю, а такая операция в программах встречается достаточно часто.
В связи с этим при реализации в арифметическом и логическом устройстве (АЛУ) арифметических операций над целыми числами практически применяется дополнительный код.
1.2.2 Представление чисел в дополнительном коде
Как и в прямом, в дополнительном коде старший разряд в разрядной сетке (регистре)отводится для представления знака числа (0 число положительное , 1 – число отрицательное). Остальные же разряды интерпретируются совершенно по другому.
Дополнительный код получают из прямого через промежуточный обратный код.
Обратный код образуется по следующему правилу:
- обратный код положительного числа совпадает с его прямым кодом.
- обратный код отрицательного числа всегда содержит единицу в знаковом разряде, а значащие разряды обратного кода получаются из значащих разрядов прямого кода путем их поразрядного инвертирования (замены единиц нулями, нулей – единицами).
Пример 6.
A10 = +5 ; A2 = +101; [A2]ОК = [A2]ПК = 0:101;
B10 = -14 ; A2 = -1110; [A2]ОК = 1:0001.
В примере 6 знаковый разряд от значащих отделен символом «:».
Обратный код обладает следующими свойствами:
- сложение положительного числа С с его отрицательным значением в обратном коде дает, так называемую, машинную единицу МЕок (1:11...1).
Пример 7.
A10 = +5 ; A2 = +101; [A2]ОК = [A2]ПК = 0:101;
A10 = -5 ; A2 = -101; [A2]ОК = 1:010;
0:101
1:010
1 :111 ;
- нуль в обратном коде имеет двоякое значение. Он может принимать как положительное значение 0:00...0, так и отрицательное – 1;11...1, причем значение отрицательного нуля совпадает со значением машинной единицы.
Двойственность нуля явилась основной причиной того, что обратный код в чистом виде в качестве машинного кода не применятся, а используется только как промежуточный для получения дополнительного кода из прямого.
Дополнительный код образуется по следующему правилу:
- дополнительный код положительного числа совпадает с прямым (и обратным) кодом;
- дополнительный код отрицательного числа представляет собой результат суммирования обратного кода числа с числом 00...1 (20 – для целых чисел или 2-k –для дробных).
Пример 8.
A10 = +19; A2 = +10011; [A2]ОК = [A2]ПК = 0:10011;
B10 =-14; A2=-1110; [A2]ДК = [A2]ОК + 20 = 1:0001 + 0:0001=1:0010.
Дополнительный код обладает следующими свойствами:
- сложение положительного числа С в дополнительном коде с его отрицательным значением дает машинную единицу дополнительного кода
МЕДК = МЕОК + 20 = 10:00...00,
т.е число 102 в знаковых разрядах числа;
- представление отрицательных чисел в дополнительном коде по сути является дополнением прямого кода числа до машинной единицы МЕДК.
Кроме обычного дополнительного кода в качестве машинных кодов находят применение модифицированные дополнительные коды, которые также образуются из прямого с использованием промежуточного, но не обратного, а модифицированного обратного кода. Модифицированные коды отличаются от обычных удвоением числа знаковых разрядов. Знак «+» в этих кодах кодируется двумя нулевыми знаковыми разрядами, а знак «-» - двумя единичными разрядами.
Пример 9.
A10 = + 9; A2 = + 1001; [A2]ПК = [A2]ОК = [A2]ДК = 0:1001
[A2]МДК = [A2]МОК = 00:1001
В10 =-9; В2 =-1001; [В2]ПК =1:1001;
[B2]ОК=1:0110;[В2]ДК = + [B2]ОК + 0001 = 1:0111
[В2]МOК = 11:0110; [A2]МДК = 11:0111.
Цель введения модифицированного дополнительного кода – обнаружение случаев получения неправильного результата, когда его значение превышает возможности разрядной сетки. В этом случае в немодифицированных кодах перенос из старшего значащего разряда может исказить значение знакового разряда (превратить число из положительного в отрицательное и наоборот).
При использовании же модифицированных кодов значение знаковых разрядов «01» свидетельствует о положительном, а значение «10» об отрицательном переполнении разрядной сетки и позволяет обнаружить ошибки вычислений.
Другой путь решения этой задачи (обнаружение переполнения разрядной сетки) - фиксация переносов из старшего значащего разряда в специальном разряде особого регистра (регистра «флагов»).
Представление 4-разрядных целых положительных и отрицательных чисел в прямом и дополнительном коде показано в табл.1.
Таблица 1 – Представление чисел в прямом и дополнительном кодах
Десятичное представление |
Прямой код |
Дополнительный код |
Смещенное представление |
+7 |
0:111 |
0:111 |
1111 |
+6 |
0:110 |
0:110 |
1110 |
+5 |
0:101 |
0:101 |
1101 |
+4 |
0:100 |
0:100 |
1100 |
+3 |
0:011 |
0:011 |
1011 |
+2 |
0:010 |
0:010 |
1010 |
+1 |
0:001 |
0:001 |
1001 |
+0 |
0:000 |
0:000 |
1000 |
-0 |
1:000 |
- |
0111 |
-1 |
1:001 |
1:111 |
0110 |
-2 |
1:010 |
1:110 |
0101 |
-3 |
1:011 |
1:101 |
0100 |
-4 |
1:100 |
1:100 |
0011 |
-5 |
1:101 |
1:011 |
0010 |
-6 |
1:110 |
1:010 |
0001 |
-7 |
1:111 |
1:001 |
0000 |
-8 |
- |
1:000 |
- |