Наш спонсор. Рекомендуем посетить.

BUY WinRAR

Скачай WinRAR сейчас!

120x90-ver156.gif (25295 bytes)

Партнерская программа для русскоязычных сайтов

Обмен программами по FTP

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 повышает ранг соответствующего типа данных со знаком.
  • В операторе присваивания конечный результат вычисления выражения в правой части приводится к типу переменной, которой должно быть присвоено это значение.

Данный процесс может привести к повышению или понижению типа, при котором величина приводится к типу данных, имеющему более низкий приоритет. Повышение типа обычно проходит гладко, чего нельзя сказать о понижении, которое может привести к затруднениям. Причина проста: всё число целиком может не поместиться в элементе данных низкого типа.

Лучше всего – вообще избегать преобразования типов, особенно в порядке убывания ранга.

В языке Паскаль, в отличие от Си, предусмотрены следующие способы преобразования типов:

  • Неявные преобразования типов;
  • Использование стандартных функций для преобразования;
  • Явные преобразования типов.

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

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

Google
Rambler's Top100 Яндекс цитирования PageRank

Регистрация доменов .RU по минимальной ценеРегистрация в системе обмена ссылками