ИНФОРМАЦИОННЫЕ системы. Представление целых чисел в памяти ЭВМ..
Никитин М.Е., преподаватель профеСсиональных модулей высшей категории
ДЕПАРТАМЕНТ ОБРАЗОВАНИЯ ГОРОДА МОСКВЫГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ПРОФЕССИОНАЛЬНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ГОРОДА МОСКВЫ «Политехнический колледж имени П.А. Овчинникова»
2
Представление целых чисел
Под каждое число выделяется область памяти определённого размера
Целые числа:
Знаковые (все биты – информационные), хранение только неотрицательных чисел
Беззнаковые (старший бит – знаковый, остальные – информационные), имеется возможность хранения отрицательных значений
Переполнение – ситуация, при которой результат операции требует больше памяти, чем выделено
Факт переполнения означает, что полученный результат неверен с математической точки зрения
© https://znanio.ru/person/z98576333
3
Представление целых чисел
Беззнаковые числа (n=3)
0002 = 010
0012 = 110
0102 = 210 23 = 8 различных
0112 = 310 значений
1002 = 410
1012 = 510
1102 = 610
1112 = 710
10002 = 010
© https://znanio.ru/person/z98576333
4
Представление целых чисел
Беззнаковые числа (n=3)
111 + 1 = 10002 = 010
Признак возникновения переполнения – наличие старшей единицы, которая в дальнейшем отбрасывается
При низкоуровневом программировании (например, на ASM) имеется возможность отследить факт возникновения переполнения
Нет числовой прямой, есть числовое кольцо
© https://znanio.ru/person/z98576333
6
Представление целых чисел
Знаковые числа
Прямой код (ПК) числа – код, полученный простым переводом числа из 10й в 2ю СС
Обратный код (ОК) числа – код, полученный инвертированием всех разрядов ПК
Дополнительный код (ДК) числа – ОК, к которому выполнили арифметическое +1
© https://znanio.ru/person/z98576333
7
Представление целых чисел
ДК позволяет заменить операцию вычитания операцией сложения (числа А и B – положительные):
a - b = a + (-b) = a + c
Целое положительное число C ведёт себя так же, как отрицательное число (-b)
Это возможно из-за того, что числовой набор представляет не прямую, а кольцо
ДК унифицирует алгоритмы выполнения операций знаковых и беззнаковых чисел в ЭВМ (упрощение архитектуры)
© https://znanio.ru/person/z98576333
10
Представление целых чисел
Знаковые числа (n=3)
0002 = 010
0012 = 110
0102 = 210 23 = 8 различных
0112 = 310 значений
1002 = -410 (переполнение!)
1012 = -310
1102 = -210
1112 = -110
10002 = 010
© https://znanio.ru/person/z98576333
13
Представление целых чисел
Признак переполнения – наличие нечётного суммарного количества «единиц» в четырёх знаковых разрядах операндов и результата (включая теряющийся разряд – при наличии)
-6: ПК=001102, ОК=110012, ДК=110102
-11: ПК=010112, ОК=101002, ДК=101012
Переполнение произошло, результат неверен
-6 | 1 | 1 | 0 | 1 | 0 |
-11 | 0 | 1 | 0 | 1 | |
-17 -> +15 | (1) 0 | 1 |
© https://znanio.ru/person/z98576333
14
Представление целых чисел
Единица в знаковом разряде – признак ДК
(n=5) Пример выполнения операции 8+10:
8: ПК=010002
10:ПК=010102
Переполнение произошло, результат неверен
ДК=100102, х=011012, ПК=011102=1410
8 | 0 | 1 | 0 | ||
10 | 1 | 0 | |||
18 -> -14 | (0) 1 | 0 |
© https://znanio.ru/person/z98576333
15
Представление целых чисел
Допускается запись в память числа без знака, а чтение со знаком (и наоборот), например:
BC++ 3.1:
unsigned int k = -200;
short int p = 40000;
cout<
short x = 20000, y = 20000;
short z = (short)(x + y);
MessageBox.Show(z.ToString());
© https://znanio.ru/person/z98576333
16
Представление целых чисел
Диапазоны хранимых значений:
беззнаковые – [0; 2n-1]
Знаковые – [-2n-1; 2n-1-1]
Стандартные типы в ЭВМ
8 битов (unsigned char, byte / char, shortint) – [0; 255], [-128; 127]
16 битов (unsigned short int, word / short int, integer) – [0; 65535], [-32768; 32767]
32 бита (unsigned long int, cardinal / long int, longint) – [0; 4.2млрд], [-2.1млрд; 2.1млрд]
64 бита (int64) – [0; 264-1], [-263; 263-1]
© https://znanio.ru/person/z98576333
20
Кодирование символьной информации
Unicode – стандарт 1991 года
1 символ = 16 бит
216 = 65536 символов
0..127 совпадает с ASCII (для совместимости)
Кодирует символы почти всех письменных языков
Избавляет от необходимости переключать кодовые страницы
Поддерживает написание LTR и RTL
Поддерживает кодирование little-endian и big-endian – определяется в начале файла после маркера последовательности байтов
© https://znanio.ru/person/z98576333
24
Представление чисел с ПЗ
Нормализация:
Справа – после запятой стоит не ноль
372,9510 = 0,37295 · 103
0,0110112 = 0,11011 · 2-1
0,12 = 0,1 · 20
Слева. Согласно стандарту IEEE 754 – мантисса принимает значения 1 ≤ m ≤ N
Недостаток: невозможно закодировать «0», поэтому представление предусматривает специальный признак нулевого значения
© https://znanio.ru/person/z98576333
25
Представление чисел с ПЗ
Тип | Р-р памяти, бит = b+М | Знач. цифр | Диапазон |
Real (k = +1) | 48=7+40 | 11–12 | |
Single (k= – 1) | 32=8+24 | 7–8 | 1.4·10-45..3.4·1038 |
Double (k= – 1) | 64=11+53 | 15–16 | 4.9·10-324..1.8·10308 |
Extended (k= – 1) | 80=15+64 | 19–20 | 3.1·10-4944..1.2·104932 |
Х = 2b–1 + k + p (k – поправочный коэффициент IBM)
© https://znanio.ru/person/z98576333
26
Представление чисел с ПЗ
Алгоритм формирования двоичного представления вещественного числа:
Число представляется в двоичном коде.
Двоичное число нормализуется. При этом для чисел, больших единицы, плавающая точка переносится влево, определяя положительный порядок. Для чисел, меньших единицы, точка переносится вправо, определяя отрицательный порядок.
С учетом типа вещественного числа по таблице определяется характеристика.
В отведенное в памяти поле, в соответствии с типом числа, записываются мантисса, характеристика и знак числа
первый бит мантиссы (для нормализованного числа всегда 1) для чисел типа real, single, double не хранится (является скрытым). В числах типа extended все разряды мантиссы хранятся в памяти ЭВМ.
© https://znanio.ru/person/z98576333
27
Представление чисел с ПЗ
Пример: –15,37510
Двоичная СС: 1111,0112
Нормализованное число: 1,1110112 · 23
M = 1,1110112
m = 1110110...02
Порядок р = 3; X = 27 – 1 + 3 = 13010= 100000102
Знак s = 1
Результат: 00 00 76 C1 или 0x76C1 (single)
© https://znanio.ru/person/z98576333
29
Представление чисел с ПЗ
Пример: 0.110
Двоичная СС:
0,0(0011)2
M=1,10011001100110011001100110
m= 100110011001100110011010
0.10000000149011610
результирующее число чуть больше 0.110
при выводе числа на экран может быть как 0.1, так и не 0.1 (зависит от компилятора среды программирования и точности вывода числа по умолчанию)
© https://znanio.ru/person/z98576333
© ООО «Знанио»
С вами с 2009 года.