Существую различные способы представления чисел в ЭВМ в зависимости от того,
какие числа:
-
целые положительные числа (без
знака).
-
целые со знаком.
-
вещественные нормализованные числа.
Целые числа без знака
Целые числа без знака
обычно занимают в памяти один или два байта и принимают:
-
в однобайтовом формате значения от
000000002 до 111111112,
-
в двубайтовом формате — от
00000000000000002 до 11111111111111112.
Диапазоны значений целых чисел без знака
Формат числа в байтах
Диапазон
Запись с порядком
Обычная запись
1
0 ... 28–1
0 ... 255
2
0 ... 216–1
0 ... 65535
Целые числа со знаком
обычно занимают в памяти компьютера один, два или четыре байта, при этом самый
левый (старший) разряд содержит информацию о знаке числа. Знак “плюс” кодируется
нулем, а “минус” – единицей.
Диапазоны значений целых чисел без знака
Формат числа в байтах
Диапазон
Запись с порядком
Обычная запись
1
-27 ... 27
-128 ... 127
2
-215 ... 215–1
-32768 ... 32767
4
-231…231-1
-2147483648 ... 2147483647
Пример
7210
в однобайтовом формате
7
6
5
4
3
2
1
0
0
1
0
0
1
0
0
0
7210
в двубайтовом формате
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
0
0
0
0
0
0
0
0
0
1
0
0
1
0
0
0
число
6553510 в двубайтовом формате
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
Целые числа со знаком
Целые числа со знаком представляются в прямом,
обратном и дополнительном кодах.
Положительные числа в прямом, обратном и дополнительном кодах изображаются
одинаково – двоичными кодами с цифрой 0 в знаковом разряде
Прямой код. В знаковый разряд
помещается цифра знака, а в разряды цифровой части числа – двоичный код его
абсолютной величины.
Прямой код числа: 1
7
6
5
4
3
2
1
0
0
0
0
0
0
0
0
1
Прямой код числа: -127
7
6
5
4
3
2
1
0
1
1
1
1
1
1
1
1
,
где
n-разрядность кода, aзн – значение знакового разряда.
Пример: если разрядность кода равна 4, то
1101=(-1)1[1x20+0x21+1x22]=-5
Обратный код. Получается
инвертированием всех цифр двоичного кода абсолютной величины числа, включая
разряд знака: нули заменяются единицами, а единицы – нулями.
Пример:
число: -1, модуль 0 0000001, обратный код 1 1111110
число: -127, модуль 0 1111111 , обратный код 1 0000000
,
где
n-разрядность машинного слова, aзн=0 для положительных чисел, aзн=1
для отрицательных чисел.
1010
= 1*(-23+1)+[0x20+1x21+0x22] = -7+2=-5
Дополнительный код. Получается
образованием обратного кода с последующим прибавлением единицы к его младшему
разряду. Пример:
число: -1 = обратный код 1 1111110
число: -127 = обратный код 1 0000000
Дополнительный код числа: -1
7
6
5
4
3
2
1
0
1
1
1
1
1
1
1
1
Дополнительный код числа: -127
7
6
5
4
3
2
1
0
1
0
0
0
0
0
0
1
Обычно отрицательные десятичные числа при вводе в машину автоматически
преобразуются в обратный или дополнительный двоичный код и в таком виде
хранятся, перемещаются и участвуют в операциях. При выводе таких чисел из машины
происходит обратное преобразование в отрицательные десятичные числа.
Алгоритм перевода отрицательных чисел в положительные
I
вариант.
Переписать исходную
последовательность битов числа справа налево до первой единицы, включая
ее. Остальные биты инвертировать.
Представление в двоичном дополнительном коде в случае 3-битного кодирования
чисел.
Набор битов
Значение
011
3
010
2
001
1
000
0
111
-1
110
-2
101
-3
100
-4
Для
дополнительного кода справедливо следующее соотношение:
,
где
n-разрядность машинного слова, aзн=0 для положительных чисел, aзн =1
для отрицательных чисел.
Пример:
1101
= 1*(-23)+[1x20+1x21+0x22]=-8+3=-5
Операции над целыми числами:
1.Сложение.
2.Вычитание. В
большинстве случаев операция вычитания не используется, вместо нее производится
сложение обратных или дополнительных кодов уменьшаемого и вычитаемого.
3.
Умножение.
4.Целочисленное деление и
нахождение остатка от деления.
Выполнение арифметических действий над целыми числами в ЭВМ
В
большинстве компьютеров операция вычитания не используется. Вместо нее
производится сложение обратных или дополнительных кодов уменьшаемого и
вычитаемого. Это позволяет существенно упростить конструкцию АЛУ.
Сложение обратных кодов – здесь при сложении
чисел А и В имеют место четыре случая.
А и В положительные.
При суммировании складываются все разряды, включая разряд знака. Так как
знаковые разряды положительных слагаемых равны нулю, разряд знака суммы тоже
равен нулю. Например:
А
положительное, B отрицательное и поабсолютной величине больше, чем А.
Получен правильный результат в обратном коде. При переводе в прямой код биты
цифровой части результата инвертируются: 1 0000111 = -710.
А
положительное, B отрицательное и по абсолютной величине меньше, чем А.
Компьютер исправляет полученный первоначально неправильный результат (6 вместо
7) переносом единицы из знакового разряда в младший разряд суммы.
А
и B отрицательные.
Полученный первоначально неправильный результат (обратный код числа -1110
вместо обратного кода числа -1010) компьютер исправляет переносом
единицы из знакового разряда в младший разряд суммы. При переводе результата в
прямой код биты цифровой части числа инвертируются: 1 0001010 = -1010.
При
сложении может возникнуть ситуация, когда старшие разряды результата операции не
помещаются в отведенной для него области памяти. Такая ситуация называется
переполнением разрядной сетки формата числа. Случай переполнения возможен и для
обратных и для дополнительных кодов.
Сложение дополнительных кодов – здесь также
имеют место четыре случая.
А
и В положительные.
А
положительное, B отрицательное и по абсолютной величине больше, чем А.
Получен правильный результат в дополнительном коде. При переводе в прямой код
биты цифровой части результата инвертируются и к младшему разряду прибавляется
единица: 1 0000110 + 1 = 1 0000111 = -710.
А
положительное, B отрицательное и поабсолютной величине меньше, чем А.
Получен правильный результат. Единицу переноса из знакового разряда компьютер
отбрасывает.
А
и B отрицательные.
Получен правильный результат в дополнительном коде. Единицу переноса из
знакового разряда компьютер отбрасывает.
Сравнение рассмотренных форм кодирования целых чисел со знаком показывает:
-
на преобразование отрицательного числа в обратный
код компьютер затрачивает меньше времени, чем на преобразование в дополнительный
код,
так как последнее состоит из двух шагов — образования обратного кода и
прибавления единицы к его младшему разряду;
-время выполнения сложения для дополнительных
кодов чисел меньше,чем для их обратных кодов, потому что в таком
сложении нет переноса единицы из знакового разряда в младший разряд результата.
Формат представления вещественных чисел
Вещественные числа в ЭВМ хранятся в нормализованном виде. При хранении числа с
плавающей точкой отводятся разряды для мантиссы, порядка, знака числа и знака
порядка:
1.Чем больше разрядов
отводится под запись мантиссы, тем выше точность представления числа.
2.Чем больше разрядов
занимает порядок, тем шире диапазон от наименьшего отличного от нуля числа до
наибольшего числа, представимого в машине при заданном формате.
Рисунок 15 – Представление вещественных чисел
Пример записи чисел в нормализованном виде в четырехбайтовом формате с семью
разрядами для записи порядка.
Число 6.2510 = 110.012 =
+0,11001•2+11.
Рисунок 16 – Пример представления положительного вещественного числа
Пример записи чисел в нормализованном виде в четырехбайтовом формате с семью
разрядами для записи порядка.
Число
–0.12510 = –0.0012 = –0.1*2–10 (отрицательный
порядок записывается в дополнительном коде).
Рисунок 17 – Пример представления отрицательного вещественного числа
Характеристики форматов вещественных чисел
Форматы вещественных чисел
Размер в байтах
Примерный диапазон абсолютных
значений
Количество значащих
десятичных цифр
Одинарный
4
10–45 … 1038
7 или 8
Вещественный
6
10–39 … 1038
11 или 12
Двойной
8
10–324 … 10308
15 или 16
Расширенный
10
10–4932 … 104932
19 или 20
Форма
представления чисел с плавающей точкой позволяет записывать числа с высокой
точностью и из весьма широкого диапазона.
Арифметические операции с вещественными числами
1.Сложение.
1.Δk=|k1-k2|.
2.если k1>k2,
то
k=k1, M=M1 + M2·10-Δk, иначе
M=M2 + M1·10-Δk, k=k2.
3.если 10-1<=M<1,
то вывод результата в виде M×10k, иначе предварительная нормализация
Пример.
X1=0.87654*101,
X2=0.94567*102. Пусть под запись мантиссы отводится 5
разрядов.
3.Деление производится по
правилу – мантиссы делятся (делимое на делитель), а порядки вычитаются (порядок
делителя из порядка делимого). Если нужно, то полученное число нормализуется