Тема 1.2
Тема 1.2. Арифметические основы ЭВМ
Системы счисления. Правила перевода чисел из одной системы счисления в другие. Арифметические действия в двоичной системе счисления. Естественная и нормальная форма. Форматы хранения чисел в ЭВМ. Машинные коды чисел: прямой, обратный, дополнительный.
Система
счисления
- совокупность приемов и правил, позволяющих установить взаимно-однозначное
соответствие между любым числом и его представлением в виде конечного числа
символов (цифр).
а) Позиционные системы счисления -
значения цифры зависит от ее места в числе.
Пример :
арабская 14537 ( 7 единиц, 3 десятка, 5 сотен, 4 тысячи, 1 десяток
тысяч ).
б) Непозиционная система
счисления - значение цифры не зависит от места в
числе.
Пример:
римская XXIV ( 10 + 10 + 4 = 24
).
в) Однородные системы счисления -
системы использующие цифры одного множества.
Пример:
десятичные ( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
).
г) Неоднородные ( смешанные ) системы
счисления .
Пример: система
подсчета времени ( 60 секунд = 1 минута, 60 минут = 1 час, 24 часа = 1
сутки ).
Пример: десятичная
система счисления
Используя
вышеуказанную формулу, запишем число 73,375. Для нашего случая система
счисления десятичная, основание 10 (q=10), в целой части числа две цифры
(n=2), в дробной части числа три цифры (m=3). Коэффициентами системы могут быть
цифры меньшие десяти - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
75,375
= 7 *101+5 *100+3 *10-1+7
*10-2+5* 10-3
Пример: двоичная система
счисления
Система
счисления двоичная (q=2).
Коэффициентами системы могут быть цифры меньшие чем два - 0, 1. Распишем общий
вид чисел и попробуем путем подбора коэффициентов представить в двоичном виде
числа от 0 до 16.
a4*24+a3*23+a2*22+a1*21+a0 *20 =
=
a4*16+a3*8+a2*4+a1*2+a0 *1
0=0
*16+0*8+0*4+0*2+0*1 (а4=0, а3=0, а2=0,
а1=0, а0=0)
1=0
*16+0*8+0*4+0*2+1*1 (а4=0, а3=0, а2=0,
а1=0, а0=1)
2=0
*16+0*8+0*4+1*2+0*1 (а4=0, а3=0, а2=0,
а1=1, а0=0)
3=0
*16+0*8+0*4+1*2+1*1 (а4=0, а3=0, а2=0,
а1=1, а0=1)
4=0
*16+0*8+1*4+0*2+0*1 (а4=0, а3=0, а2=1,
а1=0, а0=0)
5=0
*16+0*8+1*4+0*2+1*1 (а4=0, а3=0, а2=1,
а1=0, а0=1)
6=0
*16+0*8+1*4+1*2+0*1 (а4=0, а3=0, а2=1,
а1=1, а0=0)
7=0
*16+0*8+1*4+1*2+1*1 (а4=0, а3=0, а2=1,
а1=1, а0=1)
8=0
*16+1*8+0*4+0*2+0*1 (а4=0, а3=1, а2=0,
а1=0, а0=0)
9=0
*16+1*8+0*4+0*2+1*1 (а4=0, а3=1, а2=0,
а1=0, а0=1)
10=0
*16+1*8+0*4+1*2+0*1 (а4=0, а3=1, а2=0,
а1=1, а0=0)
11=0
*16+1*8+0*4+1*2+1*1 (а4=0, а3=1, а2=0,
а1=1, а0=1)
12=0
*16+1*8+1*4+0*2+0*1 (а4=0, а3=1, а2=1,
а1=0, а0=0)
13=0
*16+1*8+1*4+0*2+1*1 (а4=0, а3=1, а2=1,
а1=0, а0=1)
14=0
*16+1*8+1*4+1*2+0*1 (а4=0, а3=1, а2=1,
а1=1, а0=0)
15=0
*16+1*8+1*4+1*2+1*1 (а4=0, а3=1, а2=1,
а1=1, а0=1)
16=1
*16+0*8+0*4+0*2+0*1(а4=1, а3=0, а2=0,
а1=0, а0=0)
Пример: восьмеричная
система счисления
Система
счисления восьмеричная (q=8).
Коэффициентами системы могут быть цифры меньшие, чем восемь - 0, 1, 2, 3, 4, 5,
6, 7. Распишем общий вид чисел и попробуем путем подбора коэффициентов
представить в двоичном виде числа от 0 до 16.
a1*81 + a0 *80 = a1*8 + a0*1
0=0*8+0*1
(а1=0,
а0=0)
9=1*8+1*1 (а1=1, а0=1)
1=0*8+1*1
(а1=0,
а0=1)
10=1*8+2*1 (а1=1, а0=2)
2=0*8+2*1
(а1=0,
а0=2)
11=1*8+3*1 (а1=1, а0=3)
3=0*8+3*1
(а1=0,
а0=3)
12=1*8+4*1 (а1=1, а0=4)
4=0*8+4*1
(а1=0,
а0=4)
13=1*8+5*1 (а1=1, а0=5)
5=0*8+5*1
(а1=0,
а0=5)
14=1*8+6*1 (а1=1, а0=6)
6=0*8+6*1
(а1=0,
а0=6)
15=1*8+7*1 (а1=1, а 0=7)
7=0*8+7*1
(а1=0,
а0=7)
16=2*8+0*1 (а1=2, а 0=0)
8=1*8+0*1
(а1=1, а0=0)
Пример: шестнадцатеричная
система счисления
Система
счисления шестнадцатеричная (q=16). Коэффициентами системы могут быть цифры
меньшие, чем шестнадцать. Однако в нет цифр обозначающих числа большие десяти
(десять обозначается цифрами 1 и 0). Для записи таких чисел вместо цифр будем
использовать буквы латинского алфавита 10-А, 11-В и т.д.
Числа
от 0 до 16 в различных системах счисления запишем в таблицу, которая будет
использована в дальнейшем:
Форматы
представления чисел в компьютере
Для
хранения чисел в памяти компьютера используется два формата: целочисленный (естественная
форма) и с плавающей
точкой (нормализованная форма) (точка — разделительный знак для
целой и дробной части числа).
Целочисленный
формат (формат
с фиксированной точкой) используется
для представления в компьютере целых (англ. integer) положительных и
отрицательных чисел. Для этого, как правило, используются форматы, кратные
байту: \(1\), \(2\), \(4\) байта.
В
форме с фиксированной запятой числа изображаются в виде последовательности цифр
с постоянным для всех чисел положением запятой (или точки), отделяющей целую
часть от дробной.
Эта
форма проста и привычна для большинства пользователей, но имеет небольшой
диапазон представления чисел и поэтому не всегда пригодна при вычислениях. Если
же в результате какой-либо арифметической операции получается число, выходящее
за допустимый диапазон, то происходит переполнение разрядной сетки, и все
дальнейшие вычисления теряют смысл.
Однобайтовое
представление применяется только для положительных целых чисел. В этом формате
отсутствует знаковый разряд. Наибольшее двоичное число, которое может быть
записано при помощи \(1\) байта, равно \(11111111\), что в десятичной системе
счисления соответствует числу 25510.
Для
положительных и отрицательных целых чисел обычно используется \(2\) и \(4\)
байта, при этом старший бит выделяется под знак числа: \(0\) - плюс,
\(1\) - минус.
Самое
большое (по модулю) целое число со знаком, которое может поместиться в
\(2\)-байтовом формате, это число \(0 1111111 11111111\), то есть при
помощи подобного кодирования можно представить числа
от −32 76810 до 32 76710.
Обрати
внимание!
Если
число вышло за указанные границы, произойдет переполнение! Поэтому при работе с
большими целыми числами под них выделяется больше места, например \(4\)
байта.
Формат
с плавающей точкой (нормализованная
форма) используется
для представления в компьютере действительных чисел (англ. real). Числа с плавающей точкой
размещаются, как правило, в \(4\) или \(8\) байтах.
Нормализованная
форма представления чисел обеспечивает огромный диапазон их записи и является
основной в современных ЭВМ.
Представление
целого положительного числа в компьютере
Для
представления целого положительного числа в компьютере используется следующее
правило:
-
число переводится в двоичную систему;
- результат дополняется нулями слева в
пределах выбранного формата;
- последний разряд слева является знаковым, в
положительном числе он равен \(0\).
Например,
положительное число +13510 в зависимости от формата представления в
компьютере будет иметь следующий вид:
- для формата в виде \(1\) байта -
\(10000111\) (отсутствует знаковый разряд);
- для формата в виде \(2\)
байтов - \(0 0000000 10000111\);
- для формата в виде \(4\) байтов - \(0
0000000 00000000 00000000 10000111\).
Представление
целого отрицательного числа в компьютере
Для
представления целого отрицательного числа в компьютере используется дополнительный код. Такое
представление позволяет заменить операцию вычитания числа операцией сложения с
дополнительным кодом этого числа. Знаковый разряд целых отрицательных чисел
всегда равен \(1\).
Для
представления целого отрицательного числа в компьютере используется следующее
правило:
-
число без знака переводится в двоичную систему;
- результат дополняется
нулями слева в пределах выбранного формата;
- полученное число переводится
в обратный код (нули
заменяются единицами, а единицы - нулями);
-
к полученному коду прибавляется \(1\).
Обратный
код для
положительного двоичного числа совпадает с его прямым кодом, а для
отрицательного числа нужно во всех разрядах, кроме знакового, нули заменить
единицами и наоборот.
Дополнительный код для положительного числа совпадает с его прямым кодом, а для отрицательного числа образуется путем прибавления 1 к обратному коду.
Отрицательное
число может быть представлено в виде \(2\) или \(4\) байт.
Например,
представим число −13510 в \(2\)-байтовом
формате:
- 13510® \(10000111\) (перевод
десятичного числа без знака в двоичный код);
- \(0 0000000 10000111
\)(дополнение двоичного числа нулями слева в пределах формата);
- \(0 0000000
10000111 \)® \(1 1111111
01111000 \)(перевод в обратный код);
- \(1 1111111 01111000 \)® \(1 1111111 01111001\)
(перевод в дополнительный код).
Представление
вещественного (действительного) числа в компьютере
Вещественное
число может быть представлено в экспоненциальном виде,
например:
1600000010=0,16⋅108
−0,000015610=−0,156⋅10−4
В
этом формате вещественное число (\(R\)) представляется в виде произведения
мантиссы (\(m\)) и основания системы счисления (\(P\)) в целой степени (\(n\)),
называемой порядком.
Представим
это в общем виде, как: R=m⋅Pn.
Порядок \(n\)
указывает, на какое количество позиций и в каком направлении должна сместиться в
мантиссе точка (запятая), отделяющая дробную часть от целой. Мантисса, как
правило, нормализуется, то есть представляется в виде правильной дроби \(0\)
< \(m\) < \(1\).
Мантисса
должна быть правильной дробью, у которой первая цифра после точки (запятой в
обычной записи) отлична от нуля. Если это требование выполнено, то число
называется нормализованным.При
представлении в компьютере действительного числа с плавающей точкой тоже
используется нормализованная мантисса и целый порядок. И мантисса и порядок
представляются в двоичном виде, как это было описано выше.
Для
размещения вещественного числа обычно используется \(2\) или \(4\)
байта.
В
\(2\)-байтовом формате представления вещественного числа первый байт и три
разряда второго байта выделяются для размещения мантиссы, в остальных разрядах
второго байта размещаются порядок числа, знаки числа и
порядка.
В
\(4\)-байтовом формате представления вещественного числа первые три байта
выделяются для размещения мантиссы, в четвертом байте размещаются порядок числа,
знаки числа и порядка.
Чем
больше разрядов отводится под запись мантиссы, тем выше точность представления
числа.
Пример записи числа 6,2510=110,012=0,11001⋅211, представленного в нормализованном виде, в четырёхбайтовом формате с семью разрядами для записи порядка.
Машинные
коды чисел: прямой, обратный, дополнительный.
В
целях упрощения выполнения арифметических операций и определения знака
результата применяют специальные коды для представления чисел. Операция
вычитания (или алгебраического сложения) чисел сводится к арифметическому
сложению кодов, облегчается выработка признаков переполнения разрядной сетки. В
результате упрощаются устройства, выполняющие арифметические
операции.
Для
представления чисел со знаком в ЭВМ применяют прямой, обратный и дополнительный
коды.
Общая
идея построения кодов такова. Код трактуется как число без знака, а диапазон
представляемых кодами чисел без знака разбивается на два поддиапазона. Один из
них представляет положительные числа, другой – отрицательные. Разбиение
выполняется таким образом, чтобы принадлежность к поддиапазону определялась
максимально просто.
Наиболее
распространенным и удобным является формирование кодов таким образом, чтобы
значение старшего разряда указывало на знак представляемых чисел, т.е.
использование такого кодирования позволяет говорить о старшем разряде как о
знаковом (бит знака) и об остальных как о цифровых разрядах
кода.
Прямой
код
Это
обычный двоичный код, рассмотренный в разделе двоичной системы счисления. Если
двоичное число является положительным, то бит знака равен 0, если двоичное число
отрицательное, то бит знака равен 1. Цифровые разряды прямого кода содержат
модуль представляемого числа, что обеспечивает наглядность представления чисел в
прямом коде (ПК).Рассмотрим однобайтовое представление двоичного числа. Пусть
это будет 28(10). В двоичном формате –
0011100(2) (при однобайтовом формате под величину числа отведено
7 разрядов).Сложение в прямом коде чисел, имеющих одинаковые знаки, достаточно
просто: числа складываются, и сумме присваивается знак слагаемых. Значительно
более сложным является алгебраическое сложение в прямом коде чисел с разными
знаками. В этом случае приходится определять большее по модулю число,
производить вычитание модулей и присваивать разности знак большего по модулю
числа. Такую операцию значительно проще выполнять, используя обратный и
дополнительный коды.
Обратный
код
В
обратном коде (ОК), так же как и в прямом коде, для обозначения знака
положительного числа используется бит, равный нулю, и знака отрицательного –
единица. Обратный код отрицательного двоичного числа формируется дополнением
модуля исходного числа нулями до самого старшего разряда модуля, а затем
поразрядной заменой всех нулей числа на единицу и всех единиц на нули. В
знаковом разряде обратного кода у положительных чисел будет 0, а у отрицательных
– 1.