
- •Тема 2. Арифметические основы эвм
- •2.1. Системы счисления
- •2.2. Перевод чисел из одной системы в другую
- •Примеры:
- •2.3. Арифметические действия над числами в двоичной, восьмиричной и шестнадцатиричной системах счисления
- •Шестнадцатиричная система счисления. Таблица для сложения и вычитания чисел в шестнадцатиричной системе счисления используется также, как и таблицы для двоичной и восьмиричной систем счисления.
- •Пример:
- •2.4. Представление чисел в эвм
- •2.5. Операции над числами с плавающей запятой
Шестнадцатиричная система счисления. Таблица для сложения и вычитания чисел в шестнадцатиричной системе счисления используется также, как и таблицы для двоичной и восьмиричной систем счисления.
Таблица 4
0 1
2 3 4 5 6 7 8 9 A B C D E F
0
0 1 2 3 4 5 6 7 8 9 A B C D E F
1 1 2 3 4 5 6 7 8 9 A B C D E F 10
2 2 3 4 5 6 7 8 9 A B C D E F 10 11
3 3 4 5 6 7 8 9 A B C D E F 10 11 12
4 4 5 6 7 8 9 A B C D E F 10 11 12 13
5 5 6 7 8 9 A B C D E F 10 11 12 13 14
6 6 7 8 9 A B C D E F 10 11 12 13 14 15
7 7 8 9 A B C D E F 10 11 12 13 14 15 16
8 8 9 A B C D E F 10 11 12 13 14 15 16 17
9 9 A B C D E F 10 11 12 13 14 15 16 17 18
A A B C D E F 10 11 12 13 14 15 16 17 18 19
B B C D E F 10 11 12 13 14 15 16 17 18 19 1A
C C D E F 10 11 12 13 14 15 16 17 18 19 1A 1B
D D E F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C
E E F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D
F F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E
Пример:
9 + В = 14 1A – F = B
Алгоритм операции деление: С=А:В.
Операция деления выполняется с использованием правил десятичного деления с помощью методов умножения и вычитания.
Сначала делаем сдвиг делителя к старшему разряду делимого на n разрядов. Потом от делимого отнимаем сдвигаемый делитель до тех пор, пока остаток будет меньше, чем сдвигаемый делитель. Цифра частного определяется количеством вычитаний сдвигаемого делителя.
Остаток сдвигается на один разряд влево и определяется следующая цифра частного. Количество разрядов целой части частного на 1 больше количества сдвигов разрядов делимого, то есть n+1.
Пример:
256 (10)| 2 Делитель = 002; n = 2;
- 200
1 2 8 Сдвигаемый
делитель = 200;
56 Количество разрядов целой части частного = 3.
560
-400
160
1600
-1600
0000
2.4. Представление чисел в эвм
В зависимости от способа представления в них чисел машины делятся на машины с фиксированной запятой и машины с плавающей запятой.
В машинах с фиксированной запятой применяется естественная форма записи чисел: число представляется в виде последовательности цифр, разделенной на целую и дробную часть.
Ячейка памяти такой машины состоит из знакового разряда и цифровых разрядов. Постоянное количество числовых разрядов отведено для хранения целой части числа, остальные цифровые разряды предназначены для изображения ее целой части.
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
знак |
Целая часть |
Дробная часть |
Название "машина с плавающей запятой (точкой)" происходит от того, что при записи чисел в ячейках запятая помещается (с помощью записи в указателе положения запятой) после любого цифрового разряда ячейки.
При этом используются числа в так называемой нормализованной форме. Числа с плавающей запятой представляются в ЭВМ по формуле:
А = М*q p,
где М ‑ мантисса;
q ‑ основание системы счисление;
р ‑ порядок числа.
Мантисса числа ограничена диапазоном
q –1 < |M| < 1.
Мантисса нормализуется таким образом, чтобы первой цифрой после запятой была значащая цифра, а не нуль. Если после вычисления мантисса имеет в старших разрядах нули, то она при нормализации сдвигается влево на количество нулевых разрядов и при этом порядок уменьшается на столько же единиц, сколько сдвигов влево было в мантиссе. Например, отобразим число
А = -13,75 (10)
в форме с плавающей запятой.
-13,75 (10) = -1101,11 (2) = -D,C (16) = -DC*16 1
При этом: М = -0,DC00 (16) = -0,1101 1100 0000 0000 (2)
В современных ЭВМ используется не порядок, а характеристика (Х), которая более порядка на 64 единицы. Таким образом, характеристика числа будет:
Х = р+64 (10) =р+40 (16) = р+01000001 (2)
[A] п.к. = 1.11011100*101000001
знак
мантиссы
31 0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Х = р+40 (16) Мантисса от 3 до 7 байт
Характеристика
Рис.1. Формат чисел с плавающей запятой
Диапазон порядка находится от –64 к +63: -64 (10) < p < 63 (10), а диапазон характеристики — 0 < X < 127 (10)
Рассмотрим пример записи числа [A] п.к. = 1.11011100*101000001 в регистр ЭВМ с плавающей запятой (рис.2.).
1 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
... |
0 |
0 |
0 |
0 |
Х М
Рис. 2. Пример записи числа с плавающей запятой
где 0,1 m <1,
m - мантисса,
p - показатель степени.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
знак |
Цифровые разряды мантиссы |
Знак порядка |
Порядок |
КОДИРОВАНИЕ ЧИСЕЛ. Для записи и хранения числовой информации в памяти ЭВМ используются не сами числа, а их коды.
Кодом числа называется условное изображение числа в машине для выполнения арифметических операций. Двоичные числа могут быть представлены в прямом, обратном и дополнительных кодах.
Для кодирования знака числа используется один двоичный разряд, в котором знак "+" изображается цифрой 0; знак "-" изображается цифрой 1. Поскольку положительные числа в различных кодах одинаковы, то специальное кодирование относится только к отрицательным числам.
Отрицательные числа в прямом, обратном и дополнительном кодах имеют различное изображение, но знак числа "-" кодируется как "1" для всех видов кодов.
Отрицательное число в прямом коде сохраняет свое изображение, в обратном коде разряды нулей заменяются единицами, а единицы - нулями. Дополнительный код отрицательного числа соответствует обратному коду числа с прибавлением единицы к младшему разряду.
Прямой код используется при вводе и выводе чисел, а также при сохранении чисел в памяти ЭВМ.
В прямом коде все разряды числа остаются неизменными. Например,
А
(2) =1101
[A]п.к.
=
0.1101; А
(2) =
- 0,1101 [A]п.к.=
1.1101
Прямой код используется при умножении чисел. Например,
С=А*В; А (2) =1011; B (2) = -1010;
Сначала вычисляем знаковые разряды путем сложения по модулю 2:
|
0 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
‑ обозначение операции «сложение по модулю 2».
Получаем 0+1=1. Таким образом, результат будет иметь знак в прямом коде 1, что отображает знак минус.
1011
х1010
10110
+10110
1101110
Результат: [C] пк. = 1.1101110 (2).
С (2) = - 1101110 = - (1*26+1*25+1*23+1*22+0*20) = - (64+32+8+4+2) =
= - 110(10)..
Вычитание в ЭВМ выполняется как операция сложения в обратном или дополнительном коде.
Если число А>0, то обратный код пишется как прямой:
[A] обр.к. = [A] пк.
Если число А<0, то все разряды числа, кроме знакового, инвертируются. Операция инверсии выполняется по формуле:
b и= (q - 1) – b и.
Нуль в обратном коде в двоичной системе счисления имеет два изображения: “+0” = 0.00...0; “-0” = 1.11...1. В десятичной системе счисления нуль имеет такие изображения:
“+0” = 0.00...0; “-0” = 9.99...9.
Переход от обратного кода к прямому осуществляется как и при переходе от прямого к обратному с помощью операции инверсии.
Рассмотрим пример сложения чисел с разными знаками в обратном коде в двоичной и десятичной системах счисления. С = А+(-В):
В двоичной системе счисления: В десятичной системе счисления:
А (2) = 1011; [A]обр.к.= 0.1011; 0.1011 А (10) = 11; [A]обр.к.= 0.11; 0.11
В (2)= - 101; [A] обр.к. =1.1010; 1.1010 А (10) = -5; [A]обр.к. = 9.94; +9.94
(1)0.0101
(1)0.05
+ 1
+ 1
0.0110 0.06
При сложении в обратном коде перенос из старшего (знакового) разряда прибавляется к младшему разряду суммы для получения верного результата.
Если число А>0, то дополнительный код пишется как прямой:
[A] д.к. = [A]п.к.
Если число А<0, то все разряды числа, кроме знакового, инвертируются и к младшему разряду прибавляется 1.
Пример:
А (2) = - 1010; [A]д.к.= [A]обр.к. + 0.0001 = 1.0101+0.0001 = 1.0110.
Переход от дополнительного кода к прямому осуществляется как и при переходе от прямого к дополнительному (сначала преобразуется в обратный код, а потом к этому числу добавляется 1 младшего разряда).
Рассмотрим примеры сложения чисел с разными знаками в дополнительном коде:
В двоичной системе счисления: В десятичной системе счисления:
А (2) = 1011; [A]д.к.= 0.1011; 0.1011 А (10) = 11; [A]о.к.= 0.11; 0.11
В (2)= - 101; [A] д.к. = 1.1011; +1.1011 А (10) = -5; [A]о.к. = 9.95; +9.95
(1)0.0110
(1)0.06
Результаты: А (2) = 110; А (10) = 6.
При сложении в дополнительном коде перенос из старшего (знакового) разряда отбрасывается для получения верного результата.
Переполнение разрядной сетки ведет к ошибке вычисления. Рассмотрим переполнения разрядной сетки на примерах:
1) А (2) = 1011,0111; [A]м.п.к. = 00.1011,0111
В (2) = 1101,1011; [B]м.п.к. = 00.1101,1011
01.1001,0010
2) А (2) = - 1011,0111; [A]м. д.к. = 11.0100,1001
В (2) = - 1101,1011 [B] м.д.к. = 11.0010,0101
10.0110,1110
При сложении чисел с одинаковыми знаками при переполнении разрядной сетки знак результата становится другим, что является признаком переполнения. Для выявления в ЭВМ признака переполнения применяется модифицированный дополнительный код, в котором под знак числа отводятся два двоичных разряда. При этом знак “+” отображается как 00, а знак “-” ‑ 11. При переполнении знаки результата приобретают вид 01 (при сложении положительных чисел ‑ А>0) и 10 (при сложении отрицательных чисел ‑ А<0)