Тип результата арифметических выражений.


С вопросом совместимости типов непосредственно связан вопрос о типе результата арифметического выражения, если в этом выражении смешаны разные целые типы. Например, при данных объявлениях.

Пусть надо выполнить:

Var

R: real;

B: byte;

I: integer;

W: word;

Begin

………….

R := B * I + W;

................

В данном случае, не зная определенных правил, трудно предсказать тип результата (что будет присвоено R).

 

На этот случай существуют правила внутреннего преобразования результата арифметического выражения:

1) в случае бинарной (двухмерной) операции над целыми операндами оба операнда преобразуются к так называемому общему типу.

2) действия (для целых операндов) выполняются над данными общего типа, и результат получается общего типа.

3) Общим типом для двух разных целых чисел является целый тип с наименьшим диапазоном, охватывающим диапазон возможных значений обоих операндов.

При этом:

· Для Integer и Byte общим типом будет Integer.

· Для Integer и Shortint будет Integer.

· Для Integer и Word общим типом будет тип, который охватывает диапазон их значений (в отрицательной области Integer не охватывает Word, в положительной Word не охватывает Integer). Для них общим типом будет Longint.

4) Если в бинарной операции смешиваются целые и вещественные типы, то целый операнд автоматически преобразуется в операнд вещественного типа и результат также получается вещественного типа. Вычисления производятся над операндами типа extended, а результат округляется до нужной ширины вещественного типа.

5) Тип результата выражения в правой части оператора присваивания формируется независимо от типа той переменной, которая находится в левой части оператора присваивания.

R := B * I + W;


- - общий тип для выражения справа - Longint

При выполнении присваивания значения выражения типа Longint переменной другого целого типа возможно две ситуации:

1). Когда тип выражения справа от знака присваивания "вписывается" в тип переменной, которая слева (от знака присваивания)

2). Когда тип выражения справа (от знака присваивания) не вписывается в тип переменной, которая слева от знака присваивания.

Для присваивания B := A; слова тип переменной А "вписывается" в тип переменной В означает, что диапазон возможных значений типа переменной А меньше или равен диапазону возможных значений типа переменной В. Если выражение справа от знака присваивания имеет тип результата, который не вписывается в тип переменной, которая слева от знака присваивания, то преобразование (значения выражения справа к типу переменной слева) происходит с потерей информации (если присваивается один целый тип другому целому типу, то теряются старшие байты).

 



Дата добавления: 2016-05-28; просмотров: 1613;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.007 сек.