Шестнадцатеричная система счисления

Алфавит: 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 Арифметическое переполнение

Наши рекомендации