№
| Обозначение
| Размер
(байт)
| Диапазон
| Тип данных
|
| char,
signed char
|
| -128...127
| Символьный
со знаком
|
| unsigned char
|
| 0...255
| Символьный без знака
|
| short, short int, signed short ,
signed short int
|
| -32768...
| Короткое целое со знаком
|
| unsigned short,
unsigned short int
|
| 0...65535
| Короткое целое без знака
|
| int, signed,
signed int
| 1, 2, 4
| Зависит от
реализации
| Целое
|
| unsigned,
unsigned int
| 1, 2, 4
| Зависит от реализации
| Целое без знака
|
| long, signed long,
long int
|
| -2147483648…
| Длинное целое со знаком
|
| unsigned long
|
| 0...4294967295
| Длинное целое без знака
|
| float
|
| -3.4e-38...
3.14e+38
| Вещественное число с плавающей точкой
|
| double
|
| -1.7е-308..1.7е308
| Вещественное число удвоенной точности
|
| long double
|
| -3.4e-4932...
3.4e4932
| Длинное вещественное число удвоенной точности
|
Основные типы в C++ подразделяются на две группы: целочисленные типы и типы с плавающей точкой (для краткости их будем называть плавающими типами). Это арифметические типы.
В C++ нет жёсткого стандарта на диапазоны значений арифметических типов (в стандарте языка оговариваются лишь минимально допустимые значения). К целочисленным типам относятся типы, представленные следующими именами основных типов: char, short, int и long.
Имена целочисленных типов могут использоваться в сочетании с парой модификаторов типа: signed и unsigned.
Эти модификаторы изменяют формат представления данных, но не влияют на размеры выделяемых областей памяти.
Модификатор типа signed указывает, что переменная может принимать как положительные, так и отрицательные значения. Возможно, что при этом самый левый бит области памяти, выделяемой для хранения значения, используется для представления знака. Если этот бит установлен в 0, то значение переменной считается положительным. Если бит установлен в 1, то значение переменной считается отрицательным.
Модификатор типа unsigned указывает, что переменная принимает неотрицательные значения. При этом самый левый бит области памяти, выделяемой для хранения значения, используется так же, как и все остальные биты области памяти – для представления значения.
В ряде случаев модификаторы типа можно рассматривать как имена основных типов. Особое место среди множества основных целочисленных типов занимают перечисления, которые обозначаются ключевым словом enum. Перечисления представляют собой упорядоченные наборы целых значений. Они имеют своеобразный синтаксис и достаточно специфическую область использования. Здесь также многое зависит от реализации.
Под областью видимости и областью действия переменной понимается область программы, в которой переменная доступна для использования. Для переменной, описанной в блоке (функции), область видимости простирается от точки описания до конца блока, в котором эта переменная используется. Такая переменная называется локальной. Переменная, объявленная вне функции, называется глобальной, и область ее видимости простирается от точки ее описания до конца файла.
Внутри блока (функции) глобальное имя можно переопределять для ссылки на другой объект программы. После выхода из блока глобальное имя вновь обретает прежний статус и значение. Следует отметить, что переопределение глобальных переменных в локальные в блоках при разработке крупных программных комплексов может привести к ошибкам, которые при отладке и тестировании программы очень сложно выявить, поэтому такие переопределения стоит минимизировать.
Память под локальные переменные выделяется динамически на время выполнения функции. После завершения выполнения функции эта память будет доступна для других функций, поэтому хранящиеся в локальных переменных значения не являются неизменными при последующих вызовах этой функции. Если необходимо сохранять значение локальной переменной между вызовами функций, то ее описывают с модификатором (спецификатором) static. С языке С/С++ существуют несколько модификаторов, которые определяют область видимости и время жизни переменной, т.е. к какому классу памяти она принадлежит (табл. 3).
Таблица 3.
Модификаторы переменных
Модифи-каторы
| Применение
| Область видимости
| Выделение памяти
| Пояснения
|
auto
| Автоматическая локальная переменная
| Блок
| Временное
| По умолчанию принимается для любой переменной
|
register
| Регистровая локальная
| Блок
| Временное
| Как правило, размещается в машинном регистре
|
extern
| Внешняя
| Блок
|
| Может описываться в другом файле; видна загрузчику
|
static
| Статическая локальная переменная
| Блок
| Постоянное
| Область видимости соответствует локальной переменной, а время жизни - глобальной
|
static
| Статическая глобальная переменная
| файл
| Постоянное
| Данная глобальная переменная недоступна другим файлам, т.е. невидна для загрузчика.
|
volatile
| Изменяющаяся переменная
|
|
| Переменная может изменяться не только программой, но и например, периферийным устройством
|
Скалярные автоматические переменные при их описании не обнуляются. Модификатором register рекомендуется описывать часто используемые переменные. Если пользователь, не указал инициализирующее значение для внешней или глобальной переменной, то ей будет присвоено значение 0. При каждом обращении к переменной типа volatile программа заново вычисляет ее значение.
Объявление типа данных в общем виде имеет следующий формат:
[<класс памяти>] <тип><идентификатор> = < значение> ;
Примеры объявлений: static char c, b; register int x=0;
Типизированные константы описываются как:
const <тип><идентификатор> = < значение> ;
Константы языка программирования С/С++ могут иметь различный формат записи (табл. 4).
Таблица 4.
Константы языка С/С++
Константа
| Формат
| Пример
|
Символьная
Целая
Вещественная
Строковая
| Символ заключенный в апострофы
Десятичный
Восьмеричный. Запись начинается с нуля, за которым следуют восьмеричные цифры
Шестнадцатеричный. Запись начинается с 0х или 0Х, за которыми следуют шестнадцатеричные цифры
Десятичный
Экспоненциальный, Е – десятичное основание
Совокупность символов, заключенных в кавычки
| ‘d’
0x12A
0.25
2.4E-2
“day”
|