Целочисленные значения записываются в программе привычным способом:
123 4 -5 -63333 +10000
Число должно быть записано без всяких преобразований. Будет ошибкой задать целое число следующим образом:
1Е+2 (в смысле 100), или 123.0
Знак «+» перед числом может опускаться. Турбо Паскаль разрешает записывать целые значения в шестнадцатеричном формате, используя префикс $:
$FF $9 $FFFFAB0D
Регистр букв A, B, ..., F значения не имеет. Разрешается непосредственно приписывать знак числа, если значения (со знаком или без) не превышают допустимый для данного типа диапазон: от -$80 до +$7F для типа ShortInt, и от -$8000 до +$7FFF для типа Integer. Отрицательные значения для переменных типа LongInt могут быть записаны аналогичным способом. Но здесь есть особенность. Для этого типа отрицательные значения могут записываться и как целые величины без знака. При этом запись отрицательных значений в
- 63 -
шестнадцатеричном формате должна соответствовать обратному отсчету от максимального для размера LongInt положительного числа. Например, число $FFFFFFFF (условное максимальное положительное значение, размещающееся в четырех байтах) трактуется как значение типа LongInt, равное -1. Число $FFFFFFFE (это $FFFFFFFF-l) будет соответствовать уже -2 и т.д. Следуя этой схеме, значение, например -65, в шестнадцатеричном формате для типа LongInt вычислится так: от числа $FFFFFFFF, соответствующего значению -1, нужно «вычесть» еще 64:
$FFFFFFFF - 64 = $FFFFFFFF - $40 = $FFFFFFBF.
Мы специально рассмотрели запись отрицательных чисел в шестнадцатеричном формате, потому что встроенный отладчик Турбо Паскаля при выводе отрицательных целых значений в формате H приводит их к длине LongInt и выводит в обратном отсчете. Здесь необходимо сделать небольшое техническое замечание. Целые значения типов Word, Integer и LongInt хранятся в памяти в «перевернутом» виде: первым идет наименее значащий байт, а последним — наиболее значащий. Так, если мы запишем в переменную W типа Word значение $0102, то оно будет храниться как два байта $02 и $01. Аналогично, если переменной L типа LongInt присвоить значение $01020304, то оно расположится в памяти как четыре байта : $04, $03, $02, $01. Эта машинная «кухня» не важна при работе с переменными — они позволяют вообще не знать механизмов хранения данных. Но при прямом доступе в память или преобразовании данных (что разрешается языком Турбо Паскаль) эти технические подробности становятся необходимыми.
4.1.2. Вещественные числа
Вещественные значения (значения типа Real) могут записываться несколькими способами:
-1.456 |
0.00239 |
-120.00 |
.09 |
66777 |
0 |
-10 |
+123 |
123E+2 |
-1.4E-19 |
5E4 |
0.1234E+31 |
Как видно, они могут быть представлены: обычным способом с десятичной точкой; как целые, если дробная часть равна 0; в экспоненциальном формате. Экспоненциальный формат соответствует умножению на заданную степень 10. Так,
-1.4E-19 = -1.4 * (10 в степени -19).
Написание буквы E может быть как прописным, так и строчным. Без
- 64 -
использования типов повышенной точности, работающих с математическим сопроцессором 80Х87, степень может иметь не более двух цифр (в диапазоне (-38) ... (+38)), но при использования этих типов — уже до четырех цифр:
1.23456789+0120
Знак числа + может опускаться, в том числе и в экспоненте. В вещественную переменную можно записать шестнадцатеричную константу. При этом она преобразуется в вещественную форму.
4.1.3. Логический тип
Логический тип Boolean состоит из двух значений: False (ложно) и True (истинно). Слова False и True определены в языке и являются, по сути, логическими константами. Регистр букв в их написании несущественен: FALSE = false. Значения этого типа участвуют во всевозможных условных операторах языка. С логическим типом связан ряд операций языка, реализующий Булеву алгебру (логические НЕ, И, ИЛИ и др.)
4.1.4. Символьный тип
Символьный тип Char — это тип данных, состоящих из одного символа (знака, буквы, кода). Традиционная запись символьного значения представляет собой собственно символ, заключенных в одиночные кавычки: 'ж', 'z' '.' ' ' (пробел) и т.п. В Турбо Паскале имеются альтернативные способы представления символов. Все они будут рассмотрены в гл. 8 «Обработка символов и строк». Значением типа Char может быть любой символ из набора ASCII — однако на каждый из них можно «написать» на клавиатуре.
4.1.5. Строковый тип
Очень важным и полезным является тип динамических строк String. (здесь «динамические» означает переменной длины). Можно задать, например, тип String[126] — и переменные такого типа смогут иметь в себе строки длиной от 0 до 126 символов. В Турбо Паскале строки — это больше, чем просто массив символов. К ним прилагается библиотека средств, позволяющих делать со строками буквально все, что угодно. Значения типа «строка» в простейшем случае записываются как обычные текстовые строчки, заключенные в одиночные кавычки:
- 65 -
'строчка '
'строка из цифр 12345'
'В кавычках может стоять любой символ, кроме кода 13'
's'
'' (пустая строка)
'Это - '' - одиночная кавычка в строке'
4.1.6. Адресный тип
Язык Турбо Паскаль объявляет специальный адресный тип — Pointer. Значением этого типа является адрес ячейки памяти, представленный по правилом MS-DOS. Тип Pointer — сугубо внутренний. Его значения нельзя вывести на печати или записать в переменную, как мы записываем числовые значения. Вместо этого всегда приходится использовать специальные функции для преобразования условной общепринятой записи адресов памяти в формат типа Pointer и наоборот.
Мы рассмотрели типы, вводимые языком. Кроме них, есть категории типов данных, вводимых программистом, которые мы далее рассмотрим подробно. К ним относятся в первую очередь перечислимые типы.
4.1.7. Перечислимые типы
Перечислимый тип — это такой тип данных, при котором количество всех возможных значений ограничено (конечно). Например, тип Word соответствует этому определению. В нем 65536 значений — от 0 до 65535. И уж точно перечислимыми являются типы: Byte — 256 значений от 0 до 255 и Char — в нем 256 символов с кодами от 0 до 255. Можно перечислить и все значения типов ShortInt, Integer и даже LongInt. Только перечисление начнется не с нуля, а с отрицательного целого значения.
Есть и еще один предопределенный перечислимый тип — Boolean. У него всего два значения — False и True. Принято, что номер False внутри языка равен 0, а номер True равен 1. Перечислимый тип можно расписать в ряд по значениям. Тип Char можно было расписать в синтаксисе Паскаля как
TYPE
Char = ( симв0, симв1..., симв64, 'A', 'B', 'C', ...симв255);
тип Byte выглядел бы так:
Byte = (0, 1, 2,...,254, 255);
- 66 -
а логический тип — как
Boolean = ( False, True );
Но такие определения проделаны еще во время написания самого компилятора языка, осталось только пользоваться ими. Зато мы можем вводить новые перечислимые типы, придумывая им имена и перечисляя через запятую в круглых скобках названия элементов-значений этого типа: