4.3 Приведение типов.
Как Вы уже знаете, переменные
разных типов имеют различный размер и,
соответственно, занимают разные объёмы памяти.
Приведённая ниже программа на Паскале
демонстрирует размеры данных основных типов.

writeln(‘char=’,sizeof(char),’ байт’);
- обычная функция вывода, но она
интересна тем, что в качестве её аргумента
используется функция sizeof,
которая позволяет определить количество байтов
для размещения переменной. Тип переменной
указывается в качестве параметра этой функции.
А вот как это будет выглядеть на
Си:

Как видно здесь также
используется встроенная операция sizeof, позволяющая определить количество
байтов, необходимое для размещения переменной,
указанной в качестве параметра.
О размерах, занимаемых
переменными, мы уже говорили в п.1.4, теперь
поговорим о другом. При работе любая программа
имеет дело с данными. Некоторые данные в
программе являются числами, некоторые буквами,
или, говоря по-другому, символами. Компьютер
должен иметь возможность идентифицировать и
обрабатывать требуемым образом данные любого
типа.
Если величина является
константой, то компилятор распознаёт её тип по
внешнему виду. Для переменных же, тип должен быть
объявлен в операторе описания.
При объявлении переменной
компилятор отводит ей в памяти столько места,
сколько требует данный тип.
Для переменных типа char в памяти отводится один байт,
состоящий из 8 бит. Поскольку бит имеет только два
состояния 0 или 1, то в байтовом формате можно
представить 256 (28)
различных комбинаций из нулей и единиц в
диапазоне от 0 до 255.
При объявлении типа int, переменной отводится одно машинное
слово (два байта). В этом формате можно
представить число без знака из диапазона от 0 до
65535. Длинные целые числа используют 4 байта, т.е.
диапазон расширяется от 0 до 4 миллиардов.
Допустимые значения переменной типа int, могут быть как положительные, так и
отрицательные числа, поэтому один бит
используется для знака. Диапазон из
представления от –32768 до +32767, или для длинных: от
–2 до 2 млрд.
Ключевые слова short и long
позволяют выбрать один из трёх предложенных
диапазонов памяти. Обычно, переменным типа long, отводится два машинных слова (4
байта), а переменным типа short и int по два
байта.
Числа с плавающей точкой имеют
другой способ кодирования при размещении в
памяти. Формирование представления числа с
плавающей точкой состоит в его разбиении на
дробную часть и порядок. Для размещения
переменных типа float,
обычно отводится 32 бита (4 байта) – 8 бит для
представления порядка и знака и 24 бита – для
мантиссы (коэффициента пр степени десяти). Такой
способ даёт возможность представлять числа с
точностью до 6-7 десятичных цифр в диапазоне от
–10Е37 до 10Е+38.
Для представления данных типа double или long float
используется удвоенное число битов – 64, что
позволяет увеличить точность и диапазон
представления числа.
При разработке программы
необходимо составить список требуемых
переменных и указать их тип. Описывайте эти
данные в самом начале тела функции, которая будет
их использовать. При инициализации переменной
надо следить за тем, чтобы тип константы
соответствовал типу переменной. В операторах и
выражениях должны использоваться переменные и
константы одного типа. При смешивании типов в
одном выражении компилятор использует набор
правил для автоматического преобразования
данных к одному общему типу. Это удобно, но может
оказаться опасным, если смешение типов допущено
случайно. Также надо заметить, что в языке Си типы
можно упорядочить по убыванию или возрастанию
диапазонов возможных значений.

Правила автоматического
преобразования типов:
- Если операция выполняется над
данными двух различных типов, обе величины
приводятся к высшему из двух типов. Этот процесс
называется повышением типа.
- Последовательность имён типов,
упорядоченных от высшего типа к низшему,
выглядит так: double, float, long, int, short и char.
Использование ключевого слова unsigned повышает ранг соответствующего
типа данных со знаком.
- В операторе присваивания
конечный результат вычисления выражения в
правой части приводится к типу переменной,
которой должно быть присвоено это значение.
Данный процесс может привести к
повышению или понижению типа, при котором
величина приводится к типу данных, имеющему
более низкий приоритет. Повышение типа обычно
проходит гладко, чего нельзя сказать о понижении,
которое может привести к затруднениям. Причина
проста: всё число целиком может не поместиться в
элементе данных низкого типа.
Лучше всего – вообще избегать
преобразования типов, особенно в порядке
убывания ранга.
В языке Паскаль, в отличие от Си,
предусмотрены следующие способы преобразования
типов:
- Неявные преобразования типов;
- Использование стандартных
функций для преобразования;
- Явные преобразования типов.

Существует ещё один способ
преобразования типов характерный и для Паскаля и
для Си: точное указание типа данных, к которому
необходимо привести некоторую величину. Такой
способ называется приведением, типов.
Перед величиной в круглых
скобках записывается имя требуемого типа: (тип) переменная.
Скобки и имя типа образуют операцию приведения.
Однако надо заметить, что в Паскале данная
операция используется только для несовместимых
типов. |