Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Итог_Пособие C++.doc
Скачиваний:
8
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

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

1.2.1 Понятие типа

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

Тип данных определяет множество допустимых значений данных и набор операций над этими значениями. Информация о типе данных используется компилятором при выделении памяти для данных – размер выделяемой области памяти определяется в зависимости от типа.

Типы данных, используемые в С++, можно разделить на группы:

  • простые (скалярные);

  • составные (сложные);

  • указатели и ссылки;

  • пустой тип (void).

Составные типы используются для определения совокупностей данных. В языке С++ и его стандартной библиотеке имеется множество стандартных составных типов, также поддерживается возможность создания новых типов (классов – в терминологии объектно-ориентированного программирования).

Указатели и ссылки – особые типы, которые обеспечивают возможность косвенного доступа к объектам (переменным или функциям), используя их адреса в памяти или альтернативные имена (псевдонимы).

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

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

Систематизация простых типов представлена на рисунке 1.1.

Рисунок 1.1 Простые типы данных

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

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

  • логический тип

  • символьные типы

  • числовые типы (целые, вещественные, перечисления);

Разберёмся с правилами синтаксиса. В обозначениях простых типов в С++ могут присутствовать слова-модификаторы, позволяющие изменить диапазон допустимых значений основного типа:

  • shot (короткий), long (длинный);

  • signed (со знаком – можно явно не указывать), unsigned (без знака).

Их применение рассмотрим для каждого типа отдельно.

Логический тип имеет обозначение bool и принимает значения true и false. Его размер – 1 байт, при этом значение 0 в этом байте соответствует false, а любое ненулевое значение соответствует true. Ни в каких словах-модификаторах данный тип не нуждается.

Символьные типы. Основной символьный тип – char, который по стандарту имеет размер 1 байт и используется для хранения кодов символов в соответствии с таблицей ASCII (American Standard Code for Information Interchange — американский стандартный код для обмена информацией). Он часто обозначается с модификатором unsigned (т.е. unsigned char), чтобы полностью соответствовать таблице ASCII, в которой все допустимые символы имеют коды от 0 до 255. Символы с 0-го по 31-й являются неотображаемыми на экране монитора, символ с кодом 32 означает пробел, а коды некоторых других символов следующие:

'0'...'9' – 48...57, 'A'...'Z' – 65...90, 'a'...'z' – 97...122

Символы с кодами больше 127 (вторая половина кодовой таблицы) соответствуют символам национальных алфавитов (в нашем случае – кириллицы). К сожалению, имеется несколько различных вариантов кодировки кириллицы, поэтому могут возникнуть проблемы с некорректным выводом символов русского языка. В большинстве случаев эти проблемы снимаются с помощью функции setlocale (см. пример 1.1).

Ещё один символьный тип – wchar_t (wide char type), использующийся для работы с символами расширенных кодовых таблиц, в которых для представления символа одного байта недостаточно. В настоящее время такой таблицей является Unicode, в ней символы могут кодироваться числовыми кодами, занимающими более одного байта, – проблем с выводом кириллицы практически не возникает. Размер wchar_t в стандарте не определен, но имеются два дополнительных типа с определенными размерами wchar16_t (2 байта) и wchar32_t (4 байта). В настоящее время практически все известные компиляторы поддерживают размер 2 байта для wchar_t.

Целые типы. Имеется только один основной целый тип – int, к которому применимы модификаторы short и long (допустимо long long – очень длинное целое), а также signed (по умолчанию) и unsigned. Таким образом, можно сформировать несколько целых типов с различными диапазонами значений.

Обратим внимание, что при применении слов-модификаторов к типу int само слово int можно не указывать (например, short и short int – синонимы).

Размеры целых типов в стандарте не определены, но имеется правило:

sizeof(short) <= sizeof(int) <= sizeof(long)<=sizeof(long long)

Например, компилятор MS Visual C++ поддерживает следующие размеры целых типов (в байтах): short – 2, int и long – 4, long long – 8.

В стандарте С++11 имеются целые типы фиксированной длины – int8_t, int16_t, int32_t, int_64t.

Рассматривая целые типы, коснёмся и производного целого типа, который задаётся перечислением своих допустимых значений, поэтому получил название перечислимого типа или перечисления. Он обозначается:

enum имя_типа(список допустимых значений).

Например:

enum colors(black, white, red, green, blue)

Любая переменная типа colors сможет принимать только те значения, которые перечислены в списке, – все константы из списка имеют тип int, при этом по умолчанию нумеруются с нуля (black=0, white=1 и т.д.)

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

Вещественные типы. К ним относятся float, double и long double. Их размеры в стандарте не определены, но известно:

sizeof(float) <= sizeof(double) <=sizeof(long double)

Многие компиляторы поддерживают размер 4 байта для float и 8 байт для double и long double, в gnu c++ long double имеет размер 10 байт.

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