Классификация типов данных языка Си. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Классификация типов данных языка Си.



Современные языки программирования, как правило, могут иметь набор простых типов, являющихся встроенными в данный язык программирования, и средства для создания производных типов.

Объектно-ориентированные языки программирования позволяют определять типы класса.

Реализация простых типов данных заключается в способе представления значений данного типа в компьютере и в наборе операций, поддерживаемых для данного типа.

Тип данных определяет размер памяти, выделяемой под переменную данного типа при ее создании. Язык программирования C поддерживает следующие типы данных (рис. 16.1):

- базовые типы предопределены стандартом языка, указываются зарезервированными ключевыми словами и характеризуются одним значением. Их не надо определять и их нельзя разложить на более простые составляющие без потери сущности данных. Базовые типы объектов создают основу для построения более сложных типов;

- производные типы задаются пользователем, и переменные этих типов создаются как с использованием базовых типов, так и типов классов;

- типы класса, экземпляры этих типов называются объектами.

Рисунок 16.1 – Типы данных

Существует четыре спецификатора типа данных, уточняющих внутреннее представление и диапазон базовых типов:

- short (короткий)

- long (длинный)

- signed (знаковый)

- unsigned (беззнаковый)

Рассмотрим более подробно базовые типы данных.

16.2.3.1 Целочисленный (целый) тип данных (тип int)

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

Границы диапазона целых чисел, которые можно хранить в переменных типа int, зависят от конкретного компьютера, компилятора и операционной системы (от реализации). Для 16-разрядного процессора под него отводится два байта, для 32-разрядного – четыре байта.

Для внутреннего представления знаковых целых чисел характерно определение знака по старшему биту (0 – для положительных, 1 – для отрицательных). Поэтому число 0 во внутреннем представлении относится к положительным значениям. Следовательно, наблюдается асимметрия границ целых промежутков.

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

От количества отводимой под объект памяти зависит множество допустимых значений, которые может принимать объект:

- short int – занимает 2 байта, следовательно, имеет диапазон от –32 768 до +32 767;

- int – занимает 4 байта, следовательно, имеет диапазон от –2 147 483 648 до +2 147 483 647;

- long int – занимает 4 байта, следовательно, имеет диапазон от –2 147 483 648 до +2 147 483 647;

- long long int – занимает 8 байтов, следовательно, имеет диапазон от –9 223 372 036 854 775 808 до +9 223 372 036 854 775 807.

- Модификаторы signed и unsigned также влияют на множество допустимых значений, которые может принимать объект:

- unsigned short int – занимает 2 байта, следовательно, имеет диапазон от 0 до 65 535;

- unsigned int – занимает 4 байта, следовательно, имеет диапазон от 0 до 4 294 967 295;

- unsigned long int – занимает 4 байта, следовательно, имеет диапазон от 0 до 4 294 967 295;

- unsigned long long int – занимает 8 байтов, следовательно, имеет диапазон от 0 до 18 446 744 073 709 551 615.

Например:

unsigned int b;

signed int a;

int c;

unsigned d;

signed f;

Приведем несколько правил, касающихся записи целочисленных значений в исходном тексте программ:

- нельзя пользоваться десятичной точкой, значения 26 и 26.0 одинаковы, но 26.0 не является значением типа int;

- нельзя пользоваться запятыми в качестве разделителей тысяч. Например, число 23,897 следует записывать как 23897;

- целые значения не должны начинаться с незначащего нуля, он применяется для обозначения восьмеричных или шестнадцатеричных чисел, так что компилятор будет рассматривать значение 011 как число 9 в восьмеричной системе счисления.

На практике рекомендуется использовать основной целый тип, то есть тип int. Данные основного целого типа практически всегда обрабатываются быстрее, чем данные других целых типов. Короткий тип short подойдет для хранения больших массивов чисел с целью экономии памяти при условии, что значения элементов не выходят за предельные границы для этих типов. Длинные типы необходимы в ситуации, когда не достаточно типа int.

16.2.3.2 Вещественный (данные с плавающей точкой) тип данных (типы float и double)

Для хранения вещественных чисел применяются типы данных float (с одинарной точностью) и double (с двойной точностью). Смысл знаков "+" и "-" для вещественных типов совпадает с целыми. Последние незначащие нули справа от десятичной точки игнорируются. Поэтому варианты записи +523.5, 523.5 и 523.500 представляют одно и то же значение.

Для представления вещественных чисел используются два формата:

- с фиксированной точкой

[знак][целая часть].[дробная часть]

Например: –8.13;.168 (аналогично 0.168); 183. (аналогично 183.0).

- с плавающей точкой (экспоненциальной форме)

мантисса Е/е порядок

Например: 5.235e+02 (5.235 x 102 = 523.5); –3.4Е-03 (–3.4 x 10-03 = – 0.0034)

В большинстве случаев используется тип double, он обеспечивает более высокую точность, чем тип float. Максимальную точность и наибольший диапазон чисел достигается с помощью типа long double.

Величина с модификатором типа float занимает 4 байта. Из них 1 бит отводится для знака, 8 бит для избыточной экспоненты и 23 бита для мантиссы. Отметим, что старший бит мантиссы всегда равен 1, поэтому он не заполняется, в связи с этим диапазон модулей значений переменной с плавающей точкой приблизительно равен от 3.14E–38 до 3.14E+38.

Величина типа double занимает 8 байтов в памяти. Ее формат аналогичен формату float. Биты памяти распределяются следующим образом: 1 бит для знака, 11 бит для экспоненты и 52 бита для мантиссы. С учетом опущенного старшего бита мантиссы диапазон модулей значений переменной с двойной точностью равен от 1.7E–308 до 1.7E+308.

Величина типа long double аналогична типу double.

Например:

float a, b;

double x, y;

long double z.

Лекция 17 Основные конструкции языка Turbo Pascal и C

17.1. Основные конструкции языка Turbo Pascal

17.1.1. Константы

17.1.2. Переменные

17.1.3. Функции

17.1.4. Знаки операций

17.1.5. Круглые скобки

17.1.6. Порядок вычисления выражений

17.2. Основные конструкции языка C

17.2.1. Константы

17.2.2. Переменные

17.2.3. Функции

17.2.4. Знаки операций

17.2.5. Круглые скобки.

17.2.6. Порядок вычисления выражений.

17.1 Основные конструкции языка Turbo Pascal

Выражение – это синтаксическая единица, лежащая в основе тела программы языка Турбо Паскаль. Она определяет порядок выполнения вычислений. Выражения формируются в соответствии с рядом правил, которые рассмотрены в лекции о синтаксисе языка Турбо Паскаль.

В состав выражения входят:

- константы;

- переменные;

- функции;

- знаки операций;

- круглые скобки.

Рассмотрим каждый из элементов более подробно.

Константы

Константы – это параметры, значения которых не изменяются в процессе выполнения программы.

Паскаль допускает двоякое использование констант:

- непосредственное значение константы в теле программы без предварительного описания (в виде числа, текста и т.п.);

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

- Обычные константы – тип определяется значением

Const e = 2.7314;

Str1 = ‘Турбо Паскаль’;

- Типизированные константы, для которых тип указывается при объявлении константы и одновременно ей присваивается начальное значение

Const Str2: string = ‘Турбо’;

Str3: string = ‘Паскаль’

В отличие от обычных констант значение типизированной константы может изменяться в теле программы как у обычной переменной;

Типы констант:

- целые;

- вещественные;

- строковые и символьные;

- константы выражения;

- типизированные константы.

Переменные

Переменные – это параметры, значения которых могут изменяться в процессе выполнения программы:

Всегда перед использованием переменных в теле программы Они должны быть предварительно объявлены (описаны). Описание переменных может быть выполнено различными способами:

- в разделах объявления переменных:

- программы;

- подпрограммы;

- модуля;

- в заголовке подпрограммы.

Переменные, объявленные в разделе описания основной программы называются глобальными переменными. Для размещения глобальных переменных служит сегмент данных программы, размер которого может достигать не более 65520 байтов.

Переменные, объявленные в подпрограммах, называются локальными переменными и размещаются в стековом сегменте (по умолчанию – 16384 байта, настраивается от 0 до 65520 байтов).

Turbo Pascal допускает использование абсолютных переменных, располагаемых в строго заданных участках памяти:

- по указанному (значению сегмента и смещения) абсолютному адресу;

- по адресу начала другой переменной.

Функции

Понятие «функции» в языке программирования Турбо Паскаль было определено в первой лекции по языку.

В языке Турбо Паскаль версии 7.0 пользователю предоставлена возможность использования стандартных функций, выполненных разработчиками языка, а также создавать и использовать собственные функции.

Стандартные функции

Стандартные функции в языке Турбо Паскаль представлены тремя категориями:

- математические;

- функции преобразования типа;

- функции для величин порядкового типа.

Математические функции

Математические функции можно использовать только с величинами целого и вещественного типа. Перечень математических функций приведен в таблице 17.1.

Таблица 17.1Математическиефункции

Функция Назначение Тип результата
Abs(X) Абсолютное значение аргумента Совпадает с типом X
Arctan(X) Арктангенс аргумента Вещественный
Cos(X) Косинус аргумента Вещественный
Exp(X) ех Вещественный
Frac(X) Дробная часть числа Вещественный
Int(X) Целая часть числа Вещественный
Ln(X) Натуральный логарифм Вещественный
Pi Значение величины p=3.1415926535897932385 Вещественный
Sin(X) Синус аргумента Вещественный
Sqr(X) Квадрат аргумента Совпадает с типом X
Sqrt(X) Квадратный корень аргумента Вещественный

 

Функции преобразования типа

Эти функции предназначены для преобразования типов величин, например символа в целое число, вещественного числа в целое и т. д. К ним относятся следующие функции.

Chr(X) – преобразование ASCII -кода в символ.

Аргумент функции должен быть целого типа в диапазоне (0..255). Результатом является символ, соответствующий данному коду.

High (X) – получение максимального значения величины.

Аргумент функции - параметр или идентификатор порядкового типа, типа-массива, типа-строки или открытый массив.

Результат функции для величины порядкового типа – максимальное значение этой величины, типа-массива – максимальное значение индекса, типа–строки –объявленный размер строки, открытого массива –количество компонент массива минус 1 (максимальный индекс, при начале нумерации с нуля). –

Low(X) –получение минимального значения величины.

Аргумент функции – параметр или идентификатор порядкового типа, типа–массива, типа–строки или открытый массив. Результат функции для величины порядкового типа – минимальное значение этой величины, типа–массива – минимальное значение индекса, типа–строки или открытого массива – 0.

Ord(X) – преобразование любого порядкового типа в целый тип. Аргументом функции может быть величина любого порядкового типа (логи­ческий, символьный, перечисляемый). Результатом является величина типа Longint.

Round (X) –округление вещественного числа до ближайшего целого. Аргумент функции – величина вещественного типа, а результат –округленная до ближайшего целого величина типа Longint. Если результат выходит за диапазон значений Longint, то при выполнении программы возникает ошибка.

Trunc(X) – получение целой части вещественного числа.

Аргумент функции–величина вещественного типа, а результат –целая часть этого числа. Тип результата – Longint. Если результат выходит за диапазон значений Longint, то во время выполнения программы возникает ошибка.



Поделиться:


Последнее изменение этой страницы: 2017-02-07; просмотров: 411; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.15.151.214 (0.036 с.)