Стандартные простые типы данных
В любом алгоритмическом языке каждая константа, переменная, результат вычисления выражения или функции должны иметь определенный тип. Все типы языка С++ можно разделить на основные и составные. В языке С++ определено шесть основных типов данных для представления целых, вещественных, символьных и логических величин. На основе этих типов программист может вводить описание составных типов.
Основные (стандартные) типы данных часто называют арифметическими, поскольку их можно использовать в арифметических операциях. Для описания основных типов определены следующие ключевые слова:
- int (целый);
- char (символьный);
- wchar_t (расширенный символьный);
- bool (логический);
- float (вещественный);
- double (вещественный с двойной точностью).
Первые четыре типа называют целочисленными (целыми), последние два – типами с плавающей точкой. Код, который формирует компилятор для обработки целых величин, отличается от кода для величин с плавающей точкой.
Существует четыре спецификатора типа, уточняющих внутреннее представление и диапазон значений стандартных типов:
- short (короткий);
- long (длинный);
- signed (знаковый);
- unsigned (беззнаковый).
По умолчанию все целочисленные типы считаются знаковыми, то есть спецификатор signed можно опускать.
Базовыми в системе типов языка С++ являются простые типы, представленные в следующей таблице:
Таблица 2.Стандартные простые типы данных
Простые типы | Тип | Название | Размер, байт | Диапазон |
Логический | bool | булевское (логическое) | false, true (0, 1) | |
Символьный | signed char | символ | -128 … 127 | |
unsigned char | беззнаковый символьный | набор допустимых символов с кодами 0 … 255 | ||
Целые | short int | короткое целое (short) | -32 768 ... 32 767 (-215 .. 215 - 1) | |
unsigned short int | беззнаковое короткое целое (слово) | 0 ... 65 535 (0 .. 216 - 1) | ||
long int | длинное целое (long) | -2 147 483 648 … 2 147 483 647 | ||
unsigned long int | беззнаковое длинное целое | 0 … 4294967295 | ||
Вещественные | float | вещественный | 3.4e-38 … 3.4e+38 | |
double | двойной точности | 1.7e-308 … 1.7e+308 | ||
long double | расширенный | 3.4e-4932 … 3.4e+4923 |
Для вещественных типов в таблице приведены абсолютные величины минимальных и максимальных значений.
В стандарте ANSI диапазоны значений для основных типов не задаются, определяются только соотношения между их размерами, например:
sizeof (float) <=sizeof(double) <=sizeof(long double)
sizeof (char)<=sizeof(short) <=sizeof(int)<=sizeof(long)
Производным типом (определяемым программистом) является такой тип, который должен быть описан пользователем перед употреблением. К ним относятся массивы, перечисления, функции, структуры, ссылки, объединения и классы.
Первичными в иерархии типов являются стандартные скалярные типы, к числу которых относятся целые, вещественные, символьные, булевские типы и их модификации, учитывающие архитектурные особенности аппаратуры.
1. Булевский (логический) тип обозначается стандартным идентификатором bool. В С++ имеются две константы булевской типа, которые обозначаются также посредством стандартных идентификаторов: true (истина) и false (ложь). Внутренняя форма представления значения false-0 (нуль). Любое другое значение интерпретируется как true. При преобразовании к целому типу true имеет значение 1. Над значениями булевского типа допустимы операции сравнения, причем, считается, что false < true. Кроме того, имеются четыре, стандартные логические операции, обозначаемые символами && (конъюнкция), || (дизъюнкция) и ! (не – логическое отрицание). По приоритету эти операции имеют последовательность ! - && - ||. Значения булевского типа занимают один байт памяти.
2. Символьный тип имеет стандартный идентификатор char. Значениями переменных этого типа являются символы из множества АSCII. Это множество состоит 256 различных символов, упорядоченных определенным образом, и содержит символы заглавных и строчных букв, цифр и различных других символов, включая специальные управляющие символы. Если символьное значение имеет графическое изображение, оно представляется соответствующим знаком, заключенным в апострофы, например: '*', '1', ';'. Тип char, как другие целые типы, может быть со знаком или без знака. Величины типа char применяются также для хранения целых чисел, не превышающих границы указанных диапазонов (см. табл. 2).
Расширенный символьный тип (wchar_t) предназначен для работы с набором символов, для кодировки которых недостаточно 1 байта, например, Unicode. Размер этого типа зависит от реализации; как правило, он соответствует типу short. Строковые константы типа wchar_t записываются с префиксом L, например, L”Gates”.
3. Целые типы – эта группа типов обозначает множества целых чисел в различных диапазонах. В С++ имеется пять целых типов, различающихся диапазоном значений и объемом занимаемой оперативной памяти. Целые типы обозначаются идентификаторами int, short int, long int, unsigned short int, unsigned long int: их характеристики приведены в таблице 2. Размер типа int не определяется стандартом, а зависит от компьютера, компилятора и операционной системы. Для 16-разрядного процессора под величины этого типа отводится 2 байта, для 32-разрядного – 4 байта. Поэтому при написании программ, переносимых на различные платформы, нельзя делать предположений о размере типа int. Для его получения необходимо пользоваться операцией sizeof, результатом которой является размер типа в байтах.
Число относится к целому типу тогда и только тогда, когда в его записи не содержится ни десятичной точки, ни признака порядка e.
Константам, встречающимся в программе, приписывается тот или иной тип в соответствии с их видом. Если этот тип по каким- либо причинам не устраивает программиста, он может явно указать требуемый тип с помощью суффиксов L, l (long) и U, u (unsigned). Например, константа 32L будет иметь тип long и занимать 4 байта. Можно использовать суффиксы L и U одновременно, например, 0х22UL или 05Lu.
Над целыми значениями допустимы четыре арифметических действия, имеющие привычный смысл и обозначаемые соответственно символами: + – сложение, - – вычитание, * – умножение, / – целая часть от деления. Кроме того, в С++ можно использовать еще унарные операции (++, --, унарный минус и плюс, …), операцию "типа деления": % – нахождение остатка от деления, операции присваивания (=, *=, /=,%=, +=, -=). Все приведенные операции при целых операндах дают целый результат. Также над целочисленными данными допустимо выполнять битовые, логические операции и операции сравнения.
4. Вещественные типы - эта группа типов обозначает множества вещественных значений в различных диапазонах. C++ поддерживает три вещественных типа, которые обозначаются стандартными идентификаторами float, double, long double (см. табл. 2). Вещественные числа могут изображаться в двух формах: в форме с фиксированной точкой (целая и дробная части отделяются друг от друга точкой, например, -19.324, 0.1281) и в форме с плавающей точкой (<мантисса>e<порядок>, например, 16.2e21, 2e-48).
Константы с плавающей точкой имеют по умолчанию тип double. Можно явно указать тип константы с помощью суффиксов F, f (float) и L, l (long). Например, константа 2Е+6L будет иметь тип long double, а константа 1.82f- тип float.
Над числами вещественных типов допустимы четыре арифметические операции: сложение, вычитание, умножение и деление; операции присваивания и сравнения.
Для данных вещественных типов, как и для данных целых типов, возможна ситуация, когда результат арифметических действий выходит за пределы допустимого диапазона. В этом случае компьютер выдаст результат, преобразованный к типу, описанному для данного результата и не имеющий ничего общего с истинным значением.
5. Тип void.Кроме перечисленных, к основным типам языка относится тип void, но множество значений этого типа пусто. Он используется для определения функций, которые не возвращают значения, для указания пустого списка аргументов функции, как базовый тип для указателей и в операции приведения типов.