Шестнадцатеричная система счисления
Алфавит: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F (буквы латинского алфавита заменяю недостающие цифры системы счисления и соответствуют числам 10, 11, 12, 13, 14, 15).
Основание S = 16
Базис – степени числа 16: 160, 161, 162, 163, …или 1, 16, 256, 4096, …
Представим любое 16-ричное число через его цифры и веса разрядов:
A5D16 = D×160 + 5×161 + A×162 = 13×1 + 5×16 + 10×256 = 265310
Этим же способом любое 16-ричное число переводится в десятичную систему счисления.
Обратный перевод – из десятичной в 16-ричную систему счисления – осуществляется последовательным деление десятичного числа на основание 16-ричной системы счисления 16 и считыванием остатков от деления справа налево:
2653/16 = 165 остаток 13, то есть D
165/16 = 10 остаток 5
10/16 = 0 остаток 10, то есть A, получаем A5D16.
Особый случай перевода – двоично-шестнадцатеричный
Для перевода двоичного числа в 16-ричное необходимо:
1. разбить двоичное число справа налево по четыре цифры (недостающие слева дополнить нулями):
100110001012 = 0100 1100 01012
2. каждую четверку цифр представить числом в 16-ричной системе счисления:
0100 1100 01012 = 4C516
4 12=C 5
Для перевода 16-ричного числа в двоичное необходимо каждую цифру 16-ричного числа представить ее четырехразрядным двоичным эквивалентом:
A5D16 = 1010 0101 11012
A 5 D
Для быстрого перевода чисел из одной системы счисления в другую полезно запомнить следующую таблицу соответствия:
10-я | ||||||||||||||||
2-я | ||||||||||||||||
16-я | A | B | C | D | E | F |
Арифметические операции в двоичной системе счисления
Таблица сложения двоичной системы счисления состоит из четырех строк:
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 10 (ноль в младшем разряде и единица переноса в старшем)
Сложим два двоичных числа:
Переносы
10110110012
+
1110110112
-------------
100101101002
Вычтем одно двоичное число из другого, притом в старшем разряде при необходимости занимаем две единицы младшего:
10111110012
-
1110110112
-------------
1000111102
Результат вычитания можно проверить обратным сложением:
1000111102
+
1110110112
-------------
10111110012
Арифметические операции в восьмеричной системе счисления
Они выполняются по знакомым нам правилам вычислений в десятичной системе счисления, за исключением того, что старшая цифра не 9, а 7:
Перенос
5638
+
528
-----
6358
Рассмотрим образование следующей суммы:
68
+
58
---
138
Добавляем к первому слагаемому недостающее число до 8 – основания системы счисления. Это число 2, которое мы берем из второго слагаемого. Во втором слагаемом остается 3, которое и записывается в этот разряд, а единица переноса уходит в старший разряд суммы.
При вычитании чисел из старшего разряда при необходимости занимаем восемь единиц младшего:
5238
-
528
-----
4518
Арифметические операции в 16-ричной системе счисления
Они выполняются по знакомым нам правилам вычислений в десятичной системе счисления, за исключением того, что старшая цифра не 9, а F (15):
Перенос
9DA16
+
8216
-----
A5C16
Рассмотрим образование следующей суммы:
D16
+
816
---
1516
Добавляем к первому слагаемому (D=13) недостающее число до 16 – основания системы счисления. Это число 3, которое мы берем из второго слагаемого. Во втором слагаемом остается 5, которое и записывается в этот разряд, а единица переноса уходит в старший разряд суммы.
При вычитании чисел из старшего разряда при необходимости занимаем шестнадцать единиц младшего:
A5C16
-
8216
-----
9DA16
Приложение 3
Ошибки при компиляции
Номер ошибки | Сообщение | Значение |
Out of memory | Выход за границы памяти | |
Identifier expected | Не указан идентификатор. На этом месте должен находиться идентификатор | |
Unknown identifier | Неизвестный идентификатор. Идентификатор не был описан | |
Duplicate identifier | Повторный идентификатор. Идентификатор уже описан | |
Syntax error | Синтаксическая ошибка. В исходном тексте найден неверный символ | |
Error in real constant | Ошибка в вещественной константе | |
Error in integer constant | Ошибка в константе целого типа | |
String constant exceeds line | Строковая константа превышает допустимые размеры строки | |
Too many nested files | Слишком много вложенных файлов | |
Unexpected end of file | Некорректный конец файла | |
Line too long | Слишком длинная строка | |
Type identifier expected | Требуется идентификатор типа | |
Too many open files | Слишком много открытых файлов | |
Invalid file name | Неверное имя файла. Имя файла неверно или указывает на несуществующий путь | |
File not found | Файл не найден | |
Disk full | Диск заполнен | |
Invalid compiler directive | Неверная директива компилятора | |
Too many files | Слишком много файлов. В компиляции программы или программного модуля задействовано слишком много файлов | |
Variable identifier expected | Требуется идентификатор переменной | |
Error in type | Ошибка в определении типа. Определение типа не может начинаться с этого символа | |
Structure too large | Слишком большая структура. Максимальный размер структурного типа - 64К | |
Set base type out of range | Базовый тип множества вышел за границы. Базовый тип множества должен представлять собой отрезок порядкового типа с границами 0…255 или перечисляемый тип с не более чем 256 значениями | |
File components may not be files or objects | Компоненты файла не могут быть файлами или объектами | |
Invalid string length | Неверная длина строки. Максимальная описываемая длина строки – 255 символов | |
Type mismatch | Несоответствие типов | |
Invalid subrange base type | Неверный базовый тип диапазона. Диапазон можно описывать для данных порядкового типа | |
Lower bound greater than upper bound | Нижняя граница больше верхней | |
Ordinal type expected | Требуется порядковый тип. Действительный, строковый, структурный и указательный типы в данном случае недопустимы | |
Integer constant expected | Требуется целая константа | |
31 | Constant expected | Требуется константа |
Integer or real constant expected | Требуется целая или вещественная константа | |
Pointer type identifier expected | Требуется идентификатор типа указателя | |
Invalid function result type | Неверный тип результата функции. Правильными типами результатами функции являются все простые, строковые и ссылочные типы | |
Begin expected | Требуется слово Begin | |
End expected | Требуется слово End | |
Integer expression expected | Требуется выражение целого типа | |
Ordinal expression expected | Требуется выражение порядкового типа | |
Boolean expression expected | Требуется выражение логического типа | |
Operand types do not match operator | Типы операндов не соответствуют типу оператора | |
Error in expression | Ошибка в выражении | |
Illegal assignment | Неверное присваивание | |
Object file too large | Объектный файл слишком большой – больше 64 К | |
Code segment too large | Сегмент кода слишком большой – больше 64 К | |
Data segment too large | Сегмент данных слишком большой – больше 64 К | |
Do expected | Требуется слово Do | |
OF expected | Требуется слово Of | |
INTERFACE expected | Требуется интерфейсный раздел | |
THEN expected | Требуется слово Then | |
TO or DOWNTO expected | Требуется слово To или DownTo | |
Division by zero | Деление на ноль | |
Invalid file type | Неверный файловый тип | |
Cannot Read or Write variables of this type | Нельзя считать или записать переменные данного типа | |
Pointer variable expected | Требуется использовать переменную-указатель | |
String variable expected | Требуется строковая переменная | |
String expression expected | Требуется выражение строкового типа | |
Circular unit reference | Циклическая ссылка на модуль. В интерфейсном разделе два модуля не могут ссылаться друг на друга | |
Unit name mismatch | Несоответствие имен программных модулей. Имя программного модуля, найденное в файле .tpu , не соответствует имени, указанному в операторе Uses | |
Implementation expected | Требуется раздел реализации – отсутствует ключевое слово Implementation | |
Constant and case types do not match | Типы констант (меток) и тип выражения (переключателя) оператора Case не соответствуют друг другу | |
Record variable expected | Требуется переменная типа запись | |
Constant out of range | Константа выходит за границы допустимых значений | |
File variable expected | Требуется файловая переменная | |
Pointer expression expected | Требуется выражение типа указатель | |
Integer or real expression expected | Требуется выражение целого или вещественного типа | |
Label already defined | Метка уже определена | |
Undefined label in processing statement part | Неопределенная метка в обрабатываемом разделе операторов | |
Unit expected | Требуется слово Unit | |
‘;’ expected | Требуется ‘;’ | |
‘:’ expected | Требуется ‘:’ | |
‘,’ expected | Требуется ‘,’ | |
‘(’ expected | Требуется ‘(’ | |
‘)’ expected | Требуется ‘)’ | |
‘=’ expected | Требуется ‘=’ | |
‘:=’ expected | Требуется ‘:=’ | |
‘[’or ‘(‘ expected | Требуется ‘[’ или ‘(‘ | |
‘]’or ‘)‘ expected | Требуется ‘]’ или ‘)‘ | |
‘.’ expected | Требуется ‘.’ | |
‘..’ expected | Требуется ‘..’ | |
Too many variables | Слишком много переменных | |
Invalid FOR control variable | Недопустимый параметр цикла For – должен быть только порядкового типа | |
Integer variable expected | Требуется переменная целого типа | |
Files are not allowed here | Здесь не допускаются файлы | |
String length mismatch | Несоответствие длины. Длина строковой константы не соответствует количеству элементов символьного массива | |
String constant expected | Требуется константа строкового типа | |
Integer or real variable expected | Требуется переменная целого или вещественного типа | |
Ordinal variable expected | Требуется переменная порядкового типа | |
Character expression expected | Предшествующее выражение должно иметь символьный тип | |
Overflow in arithmetic operation | Переполнение при выполнении арифметической операции – результат операции вышел за диапазон LongInt | |
No enclosing FOR, WHILE or REPEAT statement | Процедуры Break и Continue не могут использоваться вне операторов циклов | |
CASE constant out of range | Метки оператора Case выходят за диапазон -32768…32767 | |
Too many symbols | Слишком много идентификаторов – программа описывает более 64 К идентификаторов | |
Statement part too large | Слишком большой раздел операторов – более 24 К | |
Cannot evaluate this expression | Невозможно вычислить данное выражение | |
Structured variable are not allowed here | Не допускается использование структурной переменной | |
Invalid floating-point operation | Недопустимая операция с плавающей точкой – получено переполнение или деление на ноль | |
Too many nested scopes | Слишком большая вложенность | |
File access denied | Файл недоступен. Файл не может быть открыт или создан | |
Object type expected | Требуется объектный тип |
Ошибки времени выполнения
а) Ошибки системы MS-DOS
Номер ошибки | Сообщение | Значение |
File not found | Файл не найден | |
Path not found | Путь к файлу не найден | |
Too many open files | Слишком много открытых файлов | |
File access denied | Нет доступа УК файлу | |
Invalid driver number | Некорректный номер дискового устройства | |
No more files | Нет файлов |
б)Ошибки ввода-вывода
При включенной директиве {$I-} номер ошибки ввода-вывода возвращается функцией IOResult
Номер ошибки | Сообщение | Значение |
Disk read error | Ошибка чтения диска | |
Disk write error | Ошибка записи на диск | |
File not assigned | Файл не назначен. Файловой переменной не поставлено в соответствие имя файла | |
File not open | Файл не открыт | |
File not open for input | Файл не открыт для ввода | |
File not open for output | Файл не открыт для вывода | |
Invalid numeric format | Неверный числовой формат – вместо чисел вводятся данные других типов |
в)Критические ошибки
Номер ошибки | Сообщение | Значение |
Disk is write protected | Диск защищен от записи | |
Unknown unit | Неизвестный модуль | |
Disk not ready | Дисковое устройство не готово к работе | |
Unknown command | Неопознанная команда | |
Device write fault | Ошибка при записи на устройство | |
Device read fault | Ошибка при чтении с устройства | |
Hardware failure | Сбой в оборудовании |
г)Фатальные ошибки
Номер ошибки | Сообщение | Значение |
Division by zero | Деление на ноль | |
Range check error | Выход за пределы допустимых значений | |
Stack overflow error | Переполнение стека | |
Invalid pointer operation | Некорректная операция ссылки | |
Floating point overflow | Переполнение при выполнении операции с плавающей запятой | |
Floating point underflow | Исчезновение порядка при выполнении операции с плавающей запятой | |
Invalid floating point operation | Недопустимая операция с плавающей запятой | |
Object not initialized | Объект не инициализирован | |
Arithmetic overflow | Арифметическое переполнение |