Арифметические типы данных. Числовые константы и переменные

Арифметические типы данных. Числовые константы и переменные. 

С.А. Григорьев

В языке Паскаль определены следующие арифметические типы данных: целочисленные типы - Byte, ShortInt, Word, Integer и LongInt; вещественные типы - Single, Real, Double и Extended; и не совсем вещественный тип Comp. Характеристики этих типов приведены в таблице 1 (запись 1.5e-45 означает 1.5, умноженное на 10 в степени -45, это общепринятое в языках программирования обозначение для вещественных чисел - константа с плавающей точкой).

Таблица 1

Арифметические типы данных

Название типа

Диапазон допустимых значений

Количество 

верных цифр

Размер 

в байтах

Byte

0...255

-

1

ShortInt

-128...127

-

1

Word

0..65535

-

2

Integer

-32768...32767

-

2

LongInt

-2147483648...2147483647

-

4

Single

1.5e-45...3.4e+38

7-8

4

Real

2.9e-39...1.7e+38

11-12

6

Double

5.0e-324...1.7e+308

15-16

8

Extended

3.4e-4932...1.1e+4932

19-20

10

Comp

-9.2e18...9.2e18

8

8

Типы Byte и Word используются для целых величин без знака, типы ShortInt, Integer и LongInt - для целых со знаком, типы Single, Real, Double и Extended - для вещественных величин. Тип Comp может содержать только целые числа от -2 63 +1 до +263-1, но эти числа хранятся в вещественном формате, поэтому тип Comp считается вещественным. С данными типа Comp можно обращаться так же, как с данными других вещественных типов, но дробная часть числа при этом автоматически отбрасывается.

Целые числовые константы записываются в языке Паскаль в десятичном виде или в 16-ричном виде, 16-ричная константа начинается с символа $ и содержит 16-ричные цифры : 0-9,A-F. Например, число 255 можно записать как $FF. Числовые константы по умолчанию имеют тип Integer или LongInt. Вещественные константы записываются либо с фиксированной точкой, например, -1.234, либо с плавающей точкой, например, -1.234E-5 или 555е12.

В программе, как правило, приходится использовать переменные арифметических типов. Каждая такая переменная (и переменная любого другого типа) в языке Паскаль должна быть обязательно описана, т.е. должен быть явно указан ее тип. Описание переменных в общем случае имеет вид:

VAR имя , ... , имя : тип ; имя , ... , имя : тип ; ...

Здесь имя - имена переменных (идентификаторы), тип - типы переменных, VAR - ключевое слово, означающее, что после него следуют описания переменных. Переменные одного типа можно описать совместно, разделив их имена запятыми, а можно описывать и каждую переменную отдельно. Точка с запятой означает окончание описания переменных данного типа. Слово VAR может повторяться в программе сколько угодно раз. Выбор типа для той или иной переменной определяется назначением этой переменной. Пусть, например, переменная i служит счетчиком (индексом) элементов некоторой последовательности, причем известно, что количество элементов не может превосходить 100. Мы можем описать переменную i любым целочисленным типом, но правильный выбор - Byte или ShortInt, любой другой тип будет избыточным. Всегда следует выбирать типы переменных осознанно; если вы не понимаете, какой тип должна иметь ваша переменная, вероятнее всего, эта переменная в программе не нужна. Для вещественных переменных чаще всего используется тип Real, являющийся основным вещественным типом в Паскале, поэтому мы везде будем писать Real для вещественных переменных, хотя это может быть и другой вещественный тип.

Пусть в программе нам необходимы переменные b1,b2,b3,b4 типа Byte, переменные i,j,k типа Integer и переменные r1,r2 типа Real. Их можно описать, например, так:

VAR b1,b2,b3,b4 : Byte;

     i,j,k        : Integer;

     r1,r2        : Real;

или так :

VAR b1      : Byte;

     i,j,k     : Integer;

VAR r1       : Real;

VAR b2,b3,b4 : Byte;

     r2       : Real;

Эти описания эквивалентны.

Всякая переменная обладает четырьмя атрибутами: именем, типом, адресом и значением. Имя переменной есть идентификатор, т.е. последовательность символов; тип переменной определяет ее свойства, диапазон допустимых значений и размер памяти, необходимый для размещения этой переменной; адрес переменной указывает на место в памяти, где размещается ее значение; переменная всегда имеет некоторое значение, даже если вы ничего не сделали, чтобы определить это значение. В последнем случае говорят, что переменная не определена; это значит, что ее значение не известно нам заранее (ни в коем случае не следует думать, что неопределенные переменные имеют нулевые значения - это не так).

Каким же образом определить значение переменной ? Для этого используется оператор присваивания:

имя:= выражение;

Здесь мы встречаемся с двумя новыми понятиями - оператор и выражение. Оператор - это минимальная осмысленная конструкция в языке Паскаль, вся программа - это последовательность операторов. Оператор всегда заканчивается символом ";", кроме одного единственного оператора END. Допускаются пустые операторы ";" , не выполняющие никаких действий. Выражение - это конструкция, состоящая из одного или нескольких операндов и, возможно, знаков операций, и имеющая некоторое значение. Операндами могут быть константы, переменные и другие выражения, т.е. вы можете строить сколь угодно сложные выражения. Мы не знаем пока никаких знаков операций, но предположим, что знак + означает операцию сложения (это так и есть). Запишем несколько выражений:

   1           (константа есть частный случай выражения);

   b1          (переменная есть частный случай выражения);

   25+1E3

   b1+4.25+r2

Теперь мы можем присвоить переменной ее значение:

i:=-11; j:=22+i; k:=i+j+177;

Наряду с переменными в Паскале есть и другие именованные объекты - это константы (отличайте их от числовых констант, которые не имеют имени, а лишь значение). Константы бывают двух видов - нетипизированные и типизированные. Нетипизированные константы описываются, так же, как и переменные в разделе описаний, в виде :

CONST имя=значение; имя=значение; ...

Здесь имя - идентификатор, значение - вообще говоря, некоторое выражение, которое может включать и именованные константы, описанные выше, но только не переменные. Запишем несколько примеров:

CONST C=-155;

        D=C+100;

        E=1E2+C+D;

CONST F=D+1;

CONST G=C+F;

Нетипизированные константы, описанные в разделе описаний, вы можете затем использовать в разделе операторов в выражениях, но изменить их значения невозможно. Не совсем удачное название "нетипизированные" означает не отсутствие у констант типа - любая константа имеет совершенно определенный тип, который определяется ее значением, - а лишь то обстоятельство, что при описании таких констант тип не указывается явно. В нашем примере константы C,D,F и G имеют тип Integer, а константа E - тип Real. Второй класс именованных констант - типизированные константы, описание которых имеет вид:

CONST имя:тип=значение; имя:тип=значение; ...

Эти константы вы можете использовать так же, как и нетипизированные, но можете и изменять их значения (например, с помощью оператора присваивания) подобно переменным. Типизированные константы можно, с небольшими оговорками, рассматривать как переменные, которым присвоено начальное значение. Приведем пример :

CONST t:Word  = $FFFF;   b:Byte   = 11;  r:Real   = 1.23E-16;  z:Integer = 0;

BEGIN t:=t-1; END.