Выбери формат для чтения
Загружаем конспект в формате pdf
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Лекция 2. Арифметические операции с цифровой
информацией.
Ключевые вопросы:
• Позиционные и непозиционные системы счисления.
• Перевод чисел между системами счисления.
• Примеры
выполнения
арифметических
вычислений
в
различных системах счисления.
• Фиксированная и плавающая запятая. Арифметические
операции над числами с плавающей запятой в двоичной системе
счисления.
• Примеры алгебраического сложения с использованием обратного
или дополнительного кода.
Понятие позиционной системы счисления
Определение [БСЭ]
Счисление, нумерация - совокупность приёмов наименования и
обозначения чисел.
Системы счисления обеспечивают возможность записи чисел с
помощью определенного набора письменных знаков по определенным
правилам. Система знаков для записи конкретных значений чисел
называется цифрами. К цифрам относятся только те знаки, которые по
отдельности обозначают некоторые числа. Таким образом, знаки «+», «-»,
«,» цифрами не являются.
Системы счисления делятся на позиционные и непозиционные.
В позиционных системах счисления значение цифры в записи числа
зависит от ее позиции в ней (разряда). Например, в наиболее привычной
нам десятичной системе счисления одна и та же цифра может обозначать
в зависимости от занимаемого ей разряда количество содержащихся в
числе единиц, десятков, сотен, тысяч и т.д.
В непозиционных системах счисления (примеры — римская система
счисления, биномиальная система счисления, система счисления
Штерна-Броко) величина, которую обозначает цифра, не зависит от ее
положения в числе. При этом система может накладывать ограничения на
положение цифр, например, чтобы они были расположены в порядке
убывания. Существенными недостатками таких систем счисления
являются трудность алгоритмизации выполнения арифметических
действий и необходимость использования большого количества символов
для обозначения больших чисел.
Позиционные системы счисления делятся, в свою очередь, на
однородные и неоднородные.
В однородной позиционной системе счисления набор допустимых
значений (цифр) одинаков для каждого из разрядов записи числа.
Например, любой разряд числа, записанного в десятичной системе
счисления, может принимать одно из следующих допустимых значений: 0,
1, 2, 3, 4, 5, 6, 7, 8 или 9. Количество допустимых значений разряда (то
есть количество используемых в системе счисления цифр) называется
основанием системы счисления. Для всех разрядов однородной
позиционной системы счисления основание одинаково.
В неоднородной позиционной системе счисления количество
допустимых значений у различных разрядов может не совпадать.
Примером такой системы счисления служит общепринятая система
счисления времени, в которой разряды секунд и минут могут принимать 60
различных значений (0,1, …, 59), разряд часов 24 значения (0,1, …, 23) , а
разряд суток 365 значений (0,1, …, 364). Такие системы счисления
называют также системами со смешанным основанием. Другими
известными примерами указанного класса систем служат фибоначчиева
и факториальная системы счисления, основаниями которых служат,
соответственно, последовательности чисел Фибоначчи и факториалов.
Далее в настоящем учебном пособии мы будем подробно
рассматривать имеющие наибольшее распространение однородные
позиционные системы счисления, которые для краткости будем
обозначать просто «системы счисления».
Основанием системы счисления называют количество
используемых в ней цифр. Обозначим основание буквой b. Наибольшее
распространение получили системы счисления с основаниями b=2
(двоичная), b=8 (восьмеричная), b=10 (десятичная), b=16
(шестнадцатеричная). Также в используются системы счисления с иными
основаниями: b=3 (троичная), b=12 (двенадцатеричная), b=20
(двадцатеричная), b=60 (шестидесятеричная). Отметим, что имеется
принципиальная возможность построить системы счисления с любыми
натуральными основаниями b≥2. Также существуют и не рассматриваемые
в рамках настоящего учебного пособия нега-позиционные системы
счисления с отрицательными основаниями.
Принципы формирования чисел, алгоритмы их сравнения и
арифметических операций над ними во всех однородных позиционных
системах счисления одинаковы.
Десятичная, двоичная, восьмеричная и шестнадцатеричная
системы счисления
Сравнение систем счисления
Наименование
b
Используемые цифры
(возможные значения разряда)
Десятичная
10 0 1 2 3 4 5 6 7 8 9
Двоичная
2 01
Восьмеричная
8 01234567
Шестнадцатеричная
16 0 1 2 3 4 5 6 7 8 9 A B C D E F
Во всех рассматриваемых нами системах структура записи чисел
одинакова. Возьмем для примера некоторое число, записанное в
десятичной системе счисления. Пусть это будет число семь тысяч
четыреста девяносто пять:
7
4
9
5
Значение разрядов указанного числа отражает количество
содержащихся в нем тысяч (7), сотен (4), десятков (9) и единиц (5).
Рассмотренное нами число, таким образом, может быть представлено в
виде суммы семи тысяч, четырех сотен, девяти десятков и пяти единиц:
7 × 1000
+
4 × 100
+
9
× 10
+
5
Множители, на которые следует умножать значение каждого из
разрядов в указанной записи, называются весами разрядов. Заметим,
что эти множители соответствуют степеням основания системы счисления.
Действительно, множитель разряда тысяч равен 1000, то есть 10 3,
множитель разряда сотен равен 102, множитель разряда десятков равен
101, а множитель разряда единиц равен 100. Таким образом, любое число
в десятичной системе может быть записано в виде:
N −1
∑ a i⋅10 i ,
i=0
где ai — значения разрядов.
1
7
Названия
разрядов
десятки
единицы
Веса
разрядов
102 101 100
,
2
4
сотые
3
сотни
Значения
разрядов
десятые
Аналогично может быть представлено и любая десятичная дробь,
например число 317,24 представляется так:
10-1 10-2
Те же принципы действуют в любой произвольной b-ичной системе
счисления. Произвольное число x с M разрядами в дробной части и N
разрядами в целой может быть представлено в форме линейной
комбинации степеней основания системы счисления:
N −1
x=
∑ ai⋅bi ,
i =−M
где ai — значения разрядов, а bi — соответствующие им веса.
Например, десятичное число 10 в двоичной системе счисления
записывается как 1010 и может быть разложено в виде суммы степеней
двойки:
1
× 23
+
× 22
+
1
× 21
+
× 20
1
× 8
+
× 4
+
1
× 2
+
× 1
С учетом того, что десятичное число 2 в двоичной системе
записывается как 10, вышеприведенные записи принимают вид:
1
× 1011
+
0 × 1010
+
1 × 101
+
× 100
1
×
+
0 × 100
+
1 × 10
+
×
1000
1
Запишем числа от 0 до 20 в десятичной, двоичной, восьмеричной и
шестнадцатеричной системах счисления:
b = 10
b=2
b=8
b = 16
1
1
1
1
2
10
2
2
3
11
3
3
4
100
4
4
5
101
5
5
6
110
6
6
7
111
7
7
8
1000
10
8
9
1001
11
9
10
1010
12
A
11
1011
13
B
12
1100
14
C
13
1101
15
D
14
1110
16
E
15
1111
17
F
16
10000
20
10
17
10001
21
11
18
10010
22
12
19
10011
23
13
20
10100
24
14
21
10101
25
15
22
10110
26
16
23
10111
27
17
24
11000
30
18
25
11001
31
19
26
11010
32
1A
27
11011
33
1B
28
11100
34
1C
29
11101
35
1D
30
11110
36
1E
Из указанной таблицы видно, что вес каждого разряда в b раз больше
веса младшего по отношению к нему.
Выполнение операций сравнения в десятичной, двоичной,
восьмеричной и шестнадцатеричной системах счисления
Регулярная структура чисел, записанных в однородных позиционных
системах счисления, делает процедуру их сравнения очень простой:
1) Если числа имеют различное количество разрядов в целой части,
бóльшим признается число, содержащее бóльшее число разрядов в целой
части.
2) Если числа имеют одинаковое количество разрядов в целой части,
производится сравнение значений старших разрядов целой части, при
этом бóльшим является число с бóльшим значением старшего разряда.
3) Если значения старших разрядов целой части совпадают,
производится сравнение следующих за ними разрядов целой части до тех
пор, пока не выявятся разряды с различающимися значениями; число с
бóльшим значением этого разряда признается бóльшим.
4) Если значения всех разрядов целой части при попарном сравнении
совпадают, то по аналогичным правилам продолжается попарное
сравнение разрядов дробной части (при ее отсутствии числа признаются
равными). При выявлении в дробной части разрядов с различающимися
значениями, бóльшим признается число с бóльшим значением указанного
разряда.
5) Если значения всех разрядов целой и дробной частей числа
совпадают, числа признаются равными.
Пример
Сравнить числа 3117 и 3125 в десятичной, двоичной, восьмеричной и
шестнадцатеричной системах счисления.
Сравнивая числа, начиная со старшего разряда, выделим пары разрядов,
позволяющие установить, какое из двух чисел больше:
3
1
1
7
6
5
5
C 2 D
3
1
2
5
6
6
5
C 3
1
1
1
1
1
1
1
1
1
1
1
1
5
Выполнение арифметических операций в десятичной,
двоичной, восьмеричной и шестнадцатеричной системах
счисления
Регулярная структура чисел, записанных в однородных позиционных
системах счисления обеспечивает легкую алгоритмизацию
арифметических действий над числами. Рассмотрим, как выполняется
каждая из четырех арифметических операций в изучаемых нами системах
счисления.
СЛОЖЕНИЕ
Сложение двух (или большего количества) чисел выполняется
поразрядно, начиная с младшего разряда. В случае переполнения
разряда, происходит перенос единицы в старший по отношению к
переполненному разряд. Для упрощения визуального восприятия
операции сложения часто практикуется ее запись в виде столбика.
Пример 1. Выполнить сложение десятичных чисел 323,4325 и 21,087.
3
2
3
,
4
3
2
5
2
1
,
8
7
5
4
4
,
5
2
+
3
Пример 2. Выполнить сложение двоичных чисел 1001,101 и 111,01.
1
1
,
1
1
1
1
,
1
,
1
1
1
+
1
Заметим, что:
1001,101 = 9,625
111,01 = 7,25
10000,111 = 16,875.
1
Пример 3. Выполнить сложение восьмеричных чисел 3,701 и 4,23.
3
,
7
4
,
2
3
,
1
3
1
+
1
1
Заметим, что:
3,701 = 3,876953125
4,23 = 4,296875
10,131 = 8,173828125.
Пример 4. Выполнить сложение шестнадцатеричных чисел C58,A7 и
520,3.
C 5
8
,
A 7
5
2
,
3
1
7
8
,
D 7
+
1
Заметим, что:
C58,A7 = 3160,65234375
520,3 = 1312,1875
1178,D7 = 4472,83984375.
ВЫЧИТАНИЕ
Выполнение вычитания в различных системах счисления выполняется
также схожим образом — поразрядно, начиная с младшего разряда. При
этом в случае необходимости происходит заимствование единицы из
старшего разряда.
Пример 1. Выполнить вычитание десятичных чисел 323,4325 и 21,087.
3
2
3
,
4
3
2
5
2
1
,
8
7
5
2
,
3
4
5
-
3
Пример 2. Выполнить вычитание двоичных чисел 1001,101 и 111,01.
1
1
,
1
1
1
1
,
1
1
,
1
1
-
Заметим, что:
1001,101
111,01
10,011
= 9,625
= 7,25
= 2,375.
1
Пример 3. Выполнить вычитание восьмеричных чисел 4,23 и 3,701.
4
,
2
3
3
,
7
1
,
3
2
7
-
Заметим, что:
4,23 = 4,296875
3,701 = 3,876953125
0,327 = 0,419921875.
Пример 4. Выполнить вычитание шестнадцатеричных чисел C58,A7 и
520,3.
C 5
8
,
A 7
5
2
,
3
7
3
8
,
7
-
Заметим, что:
C58,A7 = 3160,65234375
520,3 = 1312,1875
738,77 = 1848,46484375.
7
УМНОЖЕНИЕ
Алгоритм умножения чисел в позиционных системах счисления
основан на суммировании результатов поразрядного умножения.
Рассмотрим это на примере умножения двух десятичных чисел.
Пример 1. Выполнить умножение десятичных чисел 14,52 и 12,8.
1
4,5
2
×
1
2,8
1
1
6
1
2
9
4
1
4
5
2
1
8
5,8
+
5
6
6
Фактически, выполнение умножения столбиком соответствует
реализует следующий вычислительный процесс:
14,52 × 12,8 =
= 14,52 × 0,8 + 14,52 × 2 + 14,52 × 10 =
= 11,616 + 29,04 + 145,2 =
= 185,856.
Аналогично выполняется умножение в двоичной, восьмеричной и
шестнадцатеричной системах счисления, что показано в нижеприведеных
примерах 2, 3 и 4 соответственно.
Пример 2. Выполнить умножение двоичных чисел 100,101 и 111,01.
Рассмотрим таблицу умножения двоичных чисел:
×
1
1
1
1
Выполним умножение:
1,1
1
×
101,11 = 5,75
10,1 = 2,5
1110,011 = 14,375.
0,1
1
1
1
1
1
1
1
1
1
1
0,0
+
Заметим, что:
1
1
1
1
Пример 3. Выполнить умножение восьмеричных чисел 4,23 и 3,71.
Рассмотрим таблицу умножения восьмеричных чисел:
×
1
2
3
4
5
6
7
1
1
2
3
4
5
6
7
2
2
4
6 10 12 14 16
3
3
6 11 14 17 22 25
4
4 10 14 20 24 30 34
5
5 12 17 24 31 36 43
6
6 14 22 30 36 44 52
7
7 16 25 34 43 52 61
Выполним умножение:
4,2
3
3,7
1
4
2
3
5
×
+
3
6
1
4
7
1
2
0,5
5
Заметим, что:
4,23 = 4,296875
3,71 = 3,890625
20,573 = 16,717529296875.
7
3
Пример 3. Выполнить умножение шестнадцатеричных чисел D2,7 и
B0.
Рассмотрим таблицу умножения шестнадцатеричных чисел:
×
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
1
1
2
3
4
5
6
7
8
2
9
A
3
B
4
C
5
D
6
E
7
F
2 3 4 5 6 7 8 9 A B C D E F
0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 3 4 5 6 7 8 9 A B C D E F
4 6 10
8 12
A 14
C 16
E 10 12 14 16 18 1A 1C 1E
6 11
9 14
C 17
F 12
22 15
25 18 1B BE 21 24 27 2A 2D
10
8 14
C 10
20 14
24 18
30 1C
34 A0 24 28 2C 30 34 38 3C
12
A 17
F 14
24 19
31 1E
36 23
43 28 2D 32 37 3C 41 46 4B
14
C 12
22 18
30 1E
36 24
44 2A
52 30 36 3C 42 48 4E 54 5A
16
E 15
25 1C
34 23
43 2A
52 31
61 38 3F 46 4D 54 5B 62 69
10 18 A0 28 30 38 40 48 50 58 60 68 70 78
12
4 1B
6 24
10 2D
12 36
14 3F
16 48 51 5A 63 6C 75 7E 87
14
6 BE
11 28
14 32
17 3C
22 46
25 50 5A 64 6E 78 82 8C 96
10 21
16
14 2C
20 37
24 42
30 4D
34 58 63 6E 79 84 8F 9A A5
12 24
18
17 30
24 3C
31 48
36 54
43 60 6C 78 84 90 9C A8 B4
1A
14 27
22 34
30 41
36 4E
44 5B
52 68 75 82 8F 9C A9 B6 C3
1C
16 2A
25 38
34 46
43 54
52 62
61 70 7E 8C 9A A8 B6 C4 D2
1E 2D 3C 4B 5A 69 78 87 96 A5 B4 C3 D2 E1
Выполним умножение:
×
+
D 2,7
B 0
0 0 0
9 0 A D
9 0 A D, 0
Заметим:
D2,7 = 210,875
BO
=
176
90AD =
37037.
ДЕЛЕНИЕ
Одним из наиболее распространенных алгоритмов деления является
алгоритм деления столбиком. Этот алгоритм одинаково применим для
всех изучаемых нами систем счисления.
Пример 1. Выполнить деление десятичного числа 1116 на 3.
1
-
1
1
6
9
-
3
3
2
1
2
1
7
2
6
-
6
Фактически, выполнение деления столбиком соответствует реализует
следующий вычислительный процесс:
1116 = 0 × 3000 + 3 × 300 + 7 × 30 + 2 × 3 =
= 300 × 3 + 70 × 3 + 2 × 3.
Рассмотрим теперь, как производится деление в иных системах
счсиления.
Пример 2. Выполнить деление двоичного числа 111,1 (7,5) на 10 (2).
-
-
1
1
1
1,1
1
1
1
-
-
1
1
1
1
1
1,1
1
1
1
Проверка: 11,11 = 3,75
1
Пример 3. Выполнить деление восьмеричного числа 210 (136) на 4
(4).
2
1
2
4
-
-
4
1
1
2
Проверка: 42 = 34.
Пример 4. Выполнить деление шестнадцатеричного числа A418
(42008) на 8 (8).
-
A 4 1 8
8
8
1 4 8 3
2 4
-
2 0
4 1
-
4 0
1 8
-
1 8
Проверка: 1483 = 5251.
Переводы чисел между десятичной и иными системами
счисления
Принцип перевода чисел между двумя произвольными системами
счисления с основаниями b1 и b2 заключается в получении коэффициентов
линейной комбинации степеней основания новой системы счисления,
значение которой равно исходному числу. Например, десятичное число
100 может быть разложено в следующие линейные комбинации по
основаниям двоичной, восьмеричной и шестнадцатеричной систем
счисления:
100 = 1×26 + 1×25 + 0×24 + 0×23 + 1×22 + 0×21 + 0×20 = 1100100
100 = 1×82 + 4×81 + 4×80 = 144
100 = 6×161 + 4×160 = 64
Технически получить указанное разложение можно путем
многократного деления с остатком исходного числа и промежуточных
частных на основание новой системы счисления и записи остатков от
деления в обратном порядке. Процесс этот реализуется следующим
образом:
100 : 2 = 50 (остаток 0)
50 : 2 = 25 (остаток 0)
25 : 2 = 12 (остаток 1)
12 : 2 = 6 (остаток 0)
6 : 2 = 3 (остаток 0)
3 : 2 = 1 (остаток 1)
1 : 2 = 0 (остаток 1)
----------------------------1100100
100 : 8 = 12 (остаток 4) 100 : 16 = 6 (остаток 4)
12 : 8 = 1 (остаток 4) 6 : 16 = 0 (остаток 6)
1 : 8 = 0 (остаток 1) -------------------------------------------------------------64
144
Последовательность операций деления завершается при получении
на некотором шаге нулевого частного.
На практике вышеуказанный процесс записывается иногда в виде
последовательности операций деления столбиком. Например, десятичное
число 27350 переводится в шестнадцатеричную систему счисления
следующим образом:
2 7 3 5 0
-
1 6
2 7 3 4 4
6
1 7 0 9
-
1 6
1 6 9 6
1 3
1 0 6
-
9 6
1 6
6
1 0
3
Записав в обратном порядке цифрами шестнадцатеричной системы
счисления полученные остатки 6, 10, 13 и 6, получим число 6AD6.
В случае необходимости перевода из десятичной в иную систему
счисления дробных чисел производится раздельный перевод целой и
дробной частей числа. Для перевода целой части применяется описанный
нами выше прием, для перевода же дробной части осуществляется
последовательное умножение ее на основание системы счисления, в
которую производится перевод, с последующей записью полученных
целых частей произведений в порядке их получения.
Полученные целые части выписываются и обнуляются перед
очередным умножением. Процесс перевода дробной части завершается в
случае получения на некотором шаге нулевого произведения.
Следует отметить, что дроби, являющиеся конечными в одних
системах счисления, будут бесконечными в других. Например, число 2/3 в
десятичной системе счисления представлено бесконечной периодической
дробью 0,(6). В то же время, в троичной системе счисления оно
представлено в виде конечной троичной дроби 0,2.
Если при переводе дробного десятичного числа в некоторую систему
счисления получаемая дробь оказывается бесконечной, то процесс
перевода дробной части следует завершить по достижении требуемой
точности.
Пример. Перевести десятичное число 137,5625 в двоичную,
восьмеричную и шестнадцатеричную системы счисления.
1. Перевод в двоичную систему.
Целая часть:
137 : 2 = 68 (остаток 1)
68 : 2 = 34 (остаток 0)
34 : 2 = 17 (остаток 0)
17 : 2 = 8 (остаток 1)
8
: 2 = 4 (остаток 0)
4
: 2 = 2 (остаток 0)
2
: 2 = 1 (остаток 0)
1
: 2 = 0 (остаток 1)
-----------------------10010001
Дробная часть:
0,5625 × 2 = 1,125
0,125 × 2 = 0,25
0,25
× 2 = 0,5
0,5
× 2 = 1,0
-----------------1001
Ответ: 137,5625 = 10010001,1001.
2. Перевод в восьмеричную систему.
Целая часть:
137 : 8 = 17 (остаток 1)
17 : 8 = 2 (остаток 1)
2
: 8 = 0 (остаток 2)
-----------------------211
Дробная часть:
0,5625 × 8 = 4,5
0,5
× 8 = 4,0
----------------44
Ответ: 137,5625 = 211,44.
2. Перевод в шестнадцатеричную систему.
Целая часть:
137 : 16 = 8 (остаток 9)
8
: 16 = 0 (остаток 8)
-----------------------89
Ответ: 137,5625 = 89,9.
Дробная часть:
0,5625 × 16 = 9,0
----------------9
Быстрые переводы между системами счисления с кратными
основаниями: двоичной, восьмеричной и шестнадцатеричной
Приведенные выше приемы являются универсальными и подходят
для перевода чисел между произвольными системами счисления.
Пример. Перевести шестнадцатеричное число 2B,1 (43,0625 в
десятичной записи) в двоичную систему счисления.
Целая часть:
Дробная часть:
2B : 2 = 15 (остаток 1)
15 : 2 = A (остаток 1)
A : 2 = 5 (остаток 0)
5 : 2 = 2 (остаток 1)
2 : 2 = 1 (остаток 0)
1 : 2 = 0 (остаток 1)
-----------------------101011
0,1 × 2 = 0,2
0,2 × 2 = 0,4
0,4 × 2 = 0,8
0,8 × 2 = 1,0
-----------------0001
Ответ: 2B,1 = 101,011.
Тем не менее, на практике для облегчения и ускорения счета
применяются методы быстрых переводов между системами счисления с
кратными основаниями.
Если основания двух систем счисления связаны соотношением
k
b1=b 2 ,
то для записи всех возможных значений числового разряда системы
счисления с основанием b1 необходимо k числовых разрядов системы с
основанием b2. Например, одному разряду восьмеричной системы
счисления соответствуют три двоичных разряда, а одному
шестнадцатеричному разряду - четыре двоичных. Действительно:
0 = 000
1 = 001
2 = 010
3 = 011
4 = 100
5 = 101
6 = 110
7 = 111
0 = 0000
1 = 0001
2 = 0010
3 = 0011
4 = 0100
5 = 0101
6 = 0110
7 = 0111
8 = 1000
9 = 1001
A = 1010
B = 1011
C = 1100
D = 1101
E = 1110
F = 1111
Это важное свойство сводит перевод чисел между указанными
системами счисления к группировке разрядов в их двоичной записи с
дополнением при необходимости нулями разрядов перед первым
(старшим) значащим разрядом целой части и после последнего
(младшего) значащего разряда дробной части.
Пример. Перевести шестнадцатеричное число A7,12 в двоичную и
восьмеричную системы счисления.
Перевод в двоичную систему счисления:
A 7,1
A = 1010
1
1
7 = 011
1
1
2
1 = 0001
1,0
2 = 0010
1
1
1
1
A7,12 = 10100111,0001001.
Перевод в восьмеричную систему счисления:
1
010 = 2
1
1
100 = 4
1
111 = 7
2
4
10100111,0001001 = 247,044.
1,0
7,0
4
000 = 0
4
100 = 4
100 = 4
Прямой, обратный и дополнительный код
Поскольку каждая из двоичных ячеек памяти ЭВМ способна хранить лишь
значение 0 или 1, для записи чисел со знаком требуется выделить под него
один из разрядов числа. В большинстве архитектур ЭВМ в качестве такового
определяется старший разряд выделенного под число диапазона ячеек
памяти. В случае положительного числа знаковому разряду присваивают
значение 0, для отрицательного 1.
Например, десятичное число 11 будет сохранено в восьмибитной ячейке в
виде:
1
1
1
1
1
А число -5 будет храниться в виде:
1
Такую запись чисел называют прямым кодом. При его использовании в
качестве основного формата записи чисел в ЭВМ для выполнения операции
вычитания потребовалось бы наличие аппаратного блока-вычитателя, что
усложнило бы конструкцию процессора.
Избежать ненужного усложнения можно, перейдя от прямого кода к обратному
либо дополнительному, в которых операция вычитания заменяется
операцией сложения и может быть выполнена с помощью стандартного блокасумматора.
Перед детальным рассмотрением алгоритмов перевода чисел в обратный и
дополнительный код, а также алгоритмов вычитания в них, отметим, что:
положительные числа, записанные в прямом, обратном и
дополнительном коде — одинаковы.
Алгоритмы перевода числа в обратный и дополнительный код
Для перевода отрицательного числа из прямого кода в обратный следует
в знаковом разряде сохранить единицу, а цифры значащих разрядов
инвертировать, т.е. "1" заменить на "0", а "0" на "1".
Дополнительный код отрицательного числа получается из обратного кода
числа прибавлением "1" к младшему разряду этого числа.
Прямой код числа получается из обратного (дополнительного) кода по
тем же правилами, что и обратный (дополнительный) из прямого.
Например, десятичное число -11 будет иметь в прямом, обратном и
дополнительном коде вид:
Прямой код
1
1
1
1
Обратный код
1
1
1
1
1
Дополнительный код
1
1
1
1
1
1
Алгоритм сложения в обратном коде:
1.Сложение производится по правилам сложения двоичных чисел,
включая знаковый разряд .
2. Если в результате сложения возникает перенос из знакового разряда,
этот перенос осуществляется в младший разряд.
3. Если знак суммы не совпадает со знаками слагаемых (эта ситуация
может возникнуть только когда они одинаковы), имеет место переполнение
разрядной сетки ЭВМ и результат должен быть признан неверным.
Сложение в дополнительном двоичном коде отличается от сложения в
обратном коде лишь одним правилом: если в результате сложения возник
перенос из знакового разряда (переполнение), этот перенос игнорируется
(отбрасывается).
Фиксированная и плавающая запятая
Естественная форма записи дробных чисел предполагает строго
определенное расположение запятой, разделяющей целую и дробную
части числа — между младшим разрядом целой части и старшим
разрядом дробной части.
Структура представления вещественных чисел с плавающей
запятой
Число с плавающей запятой состоит из следующих частей:
- знак мантиссы (определяет, положительным или отрицательным
является число);
- мантисса (выражает значение числа без учета порядка);
- знак порядка;
- порядок (степень основания системы счисления, на которую
умножается мантисса).
В общем виде запись числа с плавающей запятой такова:
±E
порядок со знаком
b
основание
основание
системы
системы счисления
счисления
мантисса
знак мантиссы
± M ×
Примеры чисел с плавающей запятой:
1) -2,35 ·103 = -2,35·1000 = -2350.
2) 322,01·10-1 = 322,01·0,1 = 32,201.
3) 1001,101·1011 = 1001,101·1000 = 1001101,0,
где:
1001,101·1011 = 9,625·23 = 77
и
1001101 = 77.
4) 10,01·10-100 = 10,01·(1/10100) = 10,01·0,0001 = 0,001001,
где:
10,01·10-100 = 2,25·2-4 = 0,140625
и
0,001001 = 0,140625.
5) 7,71·105 = 7,71·100000 = 771000,
где
7,71·105 = 7,890625·85 = 258560
и
771000 = 258560.
6) -15000,1·10-5 = -15000,1·0,00001 = -0,150001,
где
-15000,1·10-5 = -6656,125·8-5 = -0,203128814697265625
и
-0,150001 = -0,203128814697265625.
7) 1AA·102 = 1AA·100 = 1AA00,
где
1AA·102 = 426·162 = 109056
и
1AA00 = 109056.
8) ABC·10-3 = ABC·0,001 = 0,ABC,
где
ABC·10-3 = 2748·16-3 = 0,6708984375
и
0,ABC = 0,6708984375.
Нормальная и нормализованная форма записи чисел с
плавающей запятой
Заметим, что одно и то же число может быть представлено в форме с
плавающей запятой различными способами. Например:
23,756 = 23756·10-3 = 23,756·100 = 2,3756·101 = 0,23756·102.
Нормальной формой записи числа с плавающей запятой называют
запись, при которой мантисса лежит в диапазоне 0≤M<1.
Данная форма имеет существенный недостаток: некоторые числа в
ней записываются неоднозначно:
0,02 = 0,02·100 = 0,2·10-1 = 0,00002·102 .
Нормализованная форма записи чисел с плавающей запятой
представляет собой нормальную форму, в которой мантисса числа (кроме
числа 0) лежит в диапазоне [1,b). Таким образом целая часть мантиссы
является одноразрядной.
Для выполнения операций сложения или вычитания над числами,
представленными в нормальной форме, необходимо:
1) уравнять порядки чисел;
2) произвести сложение / вычитание мантисс.
Для выполнения операций умножения / деления над числами,
представленными в нормальной форме, необходимо:
1) перемножить / разделить мантиссы;
2) вычислить порядок результата по правилам:
- при умножении порядок результата есть сумма порядков
множителей;
- при делении порядок результата есть разность порядков делимого
и делителя.
Пример 1. Даны десятичные числа А = 3,214·10-4, B = 7,11·10-7.
Вычислить:
1) A+B; 2) A-B; 3) A×B; 4) A/B.
Решение.
1) A+B = 3,214·10-4 + 7,11·10-7 = 3,214·10-4 + 0,00711·10-4 =
= (3,214+0,00711)·10-4 = 3,22111·10-4.
Приведение второго числа к порядку 10-4 произведено следующим
образом:
7,11·10-7 = (7,11/1000)·(10-7·1000), то есть путем тождественных
преобразований его мантисса была уменьшена во столько же раз, во
сколько увеличен порядок.
2) A-B = 3,214·10-4 - 7,11·10-7 = 3,214·10-4 - 0,00711·10-4 =
= (3,214+0,00711)·10-4 = 3,20689·10-4.
3) A×B = (3,214·10-4) × (7,11·10-7) = (3,214·7,11)×(10-4 ·10-7) =
= 22,85154·10-11 = 2,285154·10-10.
Отметим, что завершающим этапом вычисления произведения стала
его нормализация — приведение к нормализованной форме
(порядку 10-10).
4) A/B = (3,214·10-4) / (7,11·10-7) = (3,214/7,11)×(10-4 /10-7) =
= 0,45203938115330520393811533052039·10 3 =
= 4,5203938115330520393811533052039·10 2
Отметим, что мантисса частного представляет собой бесконечную
дробь, а завершающим этапом его вычисления стала нормализация —
приведение к нормализованной форме (порядку 102).
При необходимости арифметические операции сложения, вычитания,
умножения и деления над мантиссами могут быть выполнены столбиком.
Пример 2. Даны шестнадцатеричные числа
A=11,17D4·10-3 , B= 1,926·10-2.
Вычислить: 1) A+B; 2) A-B; 3) A×B; 4) A/B. Результат нормализовать.
Решение.
Важным свойством всех позиционных систем счисления является
представление основания системы b в виде 10. Действительно, в
двоичной системе b=2=10, в восьмеричной b=8=10, в шестнадцатеричной
b = 16 = 10. Поэтому умножение или деление числа на b в любой системе
счисления приводит к сдвигу запятой вправо или влево соответственно,
так же как это происходит в десятичной системе.
1) A+B
Приведем первое число к порядку -2:
11,17D4·10-3 = (11,17D4/10)·(10-3·10) = 1,117D4·10-2.
Действительно:
-
1 1 1 7 D 4
1 0 0 0 0 0
1 1 7 D 4 0
1 0 0 0 0 0
1 0 0 0 0 0
×
1, 1 1 7 D 4
+
1 7 D 4 0 0
1 0 0 0 0 0
0 0 0 1
,
1 0
0 0 0 0
0 0 0 1
0 0 ,0 1 0
7 D 4 0 0 0
7 0 0 0 0 0
D 4 0 0 0 0
D 0 0 0 0 0
4 0 0 0 0 0
D
4 0 0 0 0 0
Сложим мантиссы:
+
1, 1
1
7 D 4
1 ,9
2
6
2 ,A 3 D D 4
Запишем ответ:
11,17D4·10-3+1,926·10-2 = 1,117D4·10-2+1,926·10-2 = 2,A3DD4·10-2.
Поскольку ответ получен в нормализованной форме, дальнейшие
действия не требуются.
2) A-B
Приведем первое число к порядку -2:
11,17D4·10-3 = (11,17D4/10)·(10-3·10) = 1,117D4·10-2.
Вычтем мантиссы, учитывая при этом, что B>A:
-
1, 9
2
6
1 ,1
1
7 D 4
0 ,8
0 E 2 С
Запишем ответ:
11,17D4·10-3-1,926·10-2 = 1,117D4·10-2-1,926·10-2 = -0,80E2С·10-2.
3) A×B
Перемножим мантиссы:
1
×
+
2
1
1, 1
7 D 4
1, 9
2
6
6
2
2 F A 8
9
9 D 6
1
1
6
8 E F 8
7
4
7 D 4
1 A ,D D D 3 D 7
8
Нормализуем и запишем результат:
11,17D4·10-3+1,926·10-2 = 1A,DDD3D78·10-5=1,ADDD3D78·10-4.
4) A/B
Разделим мантиссы:
1
-
1
1
7 D 4
1
F B 7 C 0
-
9
2
6
A ,E
1
6
1
4
1
6
1
4
Нормализуем и запишем результат:
11,17D4·10-3/1,926·10-2 = A,E·10-1.
Проверка выполненных вычислений в десятичной системе показывает
верность полученных результатов (в верхней строке — результат
вычислений в десятичной системе, в нижней — перевод полученных нами
результатов из шестнадцатеричной системы в десятичную):
A = 0,004173114895820556640625
B = 0,0061397552490234375
A+B = 0,010312870144843994140625
0,010312870144844140625
A-B = -0,001966640353202880859375
-0,0019666403532028125
AB
= 0,00002562190408639215817674994468689
0,0000256219040863922119140625
A/B = 0,67968749999999005902454178316247
0,6796875
Пример 3. Даны восьмеричные числа
A=14,24·10-2 , B= 2,4·10-4.
Вычислить: 1) A+B; 2) A-B; 3) A×B; 4) A/B. Результат нормализовать.
Решение.
1) A+B
Приведем число B к порядку -2.
Вычисления при этом аналогичны таковым в Примере 2:
B= 2,4·10-4 = 0,024·10-2.
Выполним сложение мантисс и запишем ответ:
+
1
1
4,2
4
0,0
2
4
4,2
6
4
A+B= 14,264·10-2 = 1,4264·10-1 .
2) A-B
Приведем число B к порядку -2.
B= 2,4·10-4 = 0,024·10-2.
Выполним вычитание мантисс и запишем ответ:
-
1
1
4,2
4
0,0
2
4
4,2
1
4
A-B= 14,214·10-2 = 1,4214·10-1 .
3) A×B
Перемножим мантиссы и запишем ответ:
1
4,2
×
+
4
2,4
6
1
2
3
5
3
6,6
2
A×B= 36,62·10-6 = 3,662·10-5 .
4) A/B
Разделим мантиссы и запишем ответ:
-
1 4 2,4
1 2 0
- 2 2 4
2 1 4
1 0
7
- 4
2
1
1
-
2 4
4,7 3 1 4 6 3
4
4
4
2
2
1
0 0
7 0
1 0 0
A/B= 4,7(3146)·102.
Заметим, что частное представляет собой периодическую дробь.
Проверка, проведенная в десятичной системе счисления, показывает
верность полученных результатов.
Пример 4. Даны двоичные числа
A=101,01·10101 , B= 11,1·10100.
Вычислить: 1) A+B; 2) A-B; 3) A×B; 4) A/B. Результат нормализовать.
Решение.
1) A+B
Приведем число A к порядку 4.
Вычисления при этом аналогичны таковым в Примере 2:
A = 101,01·10101 = 1010,1·10100
Выполним сложение мантисс и запишем ответ:
+
1
1
1
1
0,1
1
1,1
1
0,0
A+B= 1110·10100 = 1,11·10111 .
2) A-B
Приведем число A к порядку 4.
A = 101,01·10101 = 1010,1·10100
Выполним вычитание мантисс и запишем ответ:
-
1
1
1
0,1
1
1,1
1
1,0
A-B = 111·10100 = 1,11·10110
3) A×B
Перемножим мантиссы и запишем ответ:
+
1,0
1
1
1,1
1
1
1
1
1
1
1
1
1
0,0
+
1
1
1
1
1
A×B= 10010,011·101001 = 1,0010011·101101 .
4) A/B
Разделим мантиссы и запишем ответ:
1
-
1
0,1
1
1
1
1
1,1
1
1
1
1
1
1
-
A/B= 1,1·101 .
1
1