Простые типы данных

Переменные. Типы данных

Тип данного определяет способ его представления в памяти и набор допустимых операций. Стандартом определены три группы типов данных: типы объектов (object types), типы функций (function types) и незавершенные типы (incomplete types). Из основных типов могут быть получены следующие производные типы: массив, структура, объединение, функция, указатель. Построение производных типов может быть проведено рекурсивно, то есть можно, например, объявить массив указателей, указатель на функцию и т.д.

В простейшем случае переменные объявляются следующим образом:

<тип_данных> <имя_переменной>;

int x; bool flag; char s;

Несколько переменных, имеющих один тип данных, могут быть объявлены вместе:

int a,b,c; //объявление трёх переменных типа int

При объявлении переменные могут быть проинициализированы, то есть им могут быть присвоены начальные значения:

int a=3, b=4, c; //Переменной «c» начальное значение не задано.

Более общий шаблон описаний следующий:

<тип_данного> <имя_переменной1> [=инициализация1] [, имя_переменной2 [=инициализация2] […] ] ];

ANSI C требует объявлять переменные в начале блока, до любых других операторов. В С99 и С++ такое ограничение отсутствует.

Тонкости в понятии типа данного в Си связаны с тем, что запись вида

< имя-типа > < список_имен >

может толковаться двояко, в зависимости от контекста, как описание или определение.

Определение устанавливает тип объекта и предписывает компилятору создать такой объект, то есть разместить его в памяти и при дальнейшей работе с этим объектом, использовать ссылку на него, его адрес.

Описание устанавливает свойства объекта, что позволяет компилятору правильно работать с таким объектом, но сам объект при этом не создается,- описаний объекта может быть несколько (в разных частях программы), а определение — только одно. Детально это вопрос будет рассмотрен ниже.

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

Среди арифметических типов выделяют действительные целые числа (integer types), действительные вещественные числа (floating-point types) и комплексные числа (complex types).

Группа целочисленных типов включает: short int, int, long int, long long int, а также их беззнаковые модификации unsigned short int, unsigned int, unsigned long int, unsigned long long int. При объявлении переменных слово-суффикс «int» является необязательным, то есть, например, short int ≡ short, unsigned int ≡ unsigned, long long int ≡ long long. Чтобы подчеркнуть, что тип является знаковым, может быть использован модификатор signed.

Пример

int x; // тоже, что и signed int x;

unsigned long t;

Стандартом установлены следующие минимальные диапазоны: short int: -32768…32767 (16 бит), int: -32768…32767 (16 бит), long int: -2147483648…2147483647 (32 бита), long long int: -263…(263-1) (64 бита). Большинство реализаций придерживаются данных диапазонов, кроме одного исключения: тип int, как правило, привязывается к разрядности компилятора: в 16 разрядных компиляторах 16-разрядная реализация int (совпадает по диапазону с short int), в 32-разрядных — 32-разрядная реализация (совпадает с long int).

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

Логический тип. Стандартом C99 в язык С добавлен тип _Bool, который может принимать два значения: 0 (в значении ЛОЖЬ) и 1 (в значении ИСТИНА).

Конструкции, требующие логические выражения (например, оператор условного перехода), принимают целочисленный тип. При этом значению 0 соответствует ЛОЖЬ, любому другому значению — ИСТИНА.

В языке С++ определен логический тип bool, принимающий значение true или false. Логические выражения принимают и возвращают именно логический, а не арифметический тип.

Для совместимости с С++ в языке С определена библиотека stdbool.h (C99), в которой определены соответствующие константы и тип данного.

К символьным типам относятся char, signed char, unsigned char. Минимальный диапазон, установленный стандартом составляет -128…127 для signed char и 0…255 для unsigned char. Большинство современных реализаций придерживаются этого диапазона.

Тип char привязывается к signed char или unsigned char в зависимости от реализации. Во многих компиляторах есть возможность переключения между этими режимами.

Для поддержки расширенного набора символов введен тип wchar_t, занимающий, как правило, 16 бит.

Также к целочисленным типам относят перечисления (enum), которые будут рассмотрены далее.

К вещественным типам относятся float, double, long double. Рекомендованные диапазоны и точность: float: 6 значащих десятичных цифр, порядок -37…+38; double: 15 значащих цифр, порядок -1021…+1024, long double должен реализовывать диапазон и точность не менее, чем double. Типовая реализация вещественных типов: float 32 бита, double 64 бита, long double 64 или 80 бит. Использование 80 разрядов обусловлено тем, что математический сопроцессор Intel Pentium-совместимых центральных процессоров работает с данными именно в таком формате. Но такое представление данных для большинства задач является избыточным, поэтому многие современные компиляторы имеют возможность переключения режимов работы long double 64 или 80 бит.

Комплексные типы введены стандартом C99 и включают float _Complex, double _Complex, long double _Complex. Их реализация представляет массив из двух элементов соответствующих вещественных типов.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: