- •Министерство образования и науки Российской Федерации
- •Содержание
- •1. Понятие алгоритма
- •1.1. Определение алгоритма
- •1.2. Гост на описание блок-схем
- •Использование символов
- •1.3. Виды алгоритмов
- •2. Языки программирования
- •2.1. Определение алгоритмического языка
- •2.2. Классификация языков. История развития языков программирования
- •2.3. Выбор языка программирования
- •2.5. Арифметические и логические основы программирования
- •3. Понятие системы программирования
- •3.1. Этапы создания программ
- •3.2. Конструирование программ
- •3.3. Методы, технологии и инструментальные средства производства программных продуктов
- •4.1. Литералы
- •4.2. Встроенные типы данных
- •Типы данных
- •4.3. Операции
- •Адресные операции
- •Операции преобразования знака
- •Побитовые операции
- •Операция определения размера
- •Операции увеличения и уменьшения значения
- •Операции динамического распределения памяти
- •Операция доступа
- •Аддитивные операции
- •Мультипликативные операции
- •Операции сдвига
- •Поразрядные операции
- •Операции сравнения
- •Логические бинарные операции
- •Операция присваивания
- •Специальные формы операций присваивания
- •Операции выбора компонентов структурированного объекта
- •Операции обращения к компонентам класса
- •Операция управления процессом вычисления значений
- •Операция вызова функции
- •Операция явного преобразования типа
- •Операция индексации
- •Приоритеты операций
- •4.5. Агрегатные типы данных
- •4.5.1. Массивы
- •4.5.2. Структуры
- •4.5.3. Поля битов
- •4.5.4. Объединения Используются для хранения значений различных типов в одной и той же области памяти, но не одновременно.
- •4.5.5. Перечисления
- •4.5.6. Переименование типов
- •Typedef имя ранее определенного типа имя нового типа1
- •Объявление typedef применяется для создания удобных распознаваемых имен часто встречающихся и для вложенных типов, а также, чтобы сделать программы переносимыми для различных целых типов.
- •4.6. Обработка символьных и строковых переменных
- •4.7. Указатели
- •4.7.1. Инициализация указателей
- •4.7.2. Операции с указателями
- •4.8. Пользовательские процедуры и функции
- •4.8.1. Перегрузка функций
- •4.8.2. Перегрузка операций
- •4.8.3. Шаблоны функций
- •4.8.4. Возврат из функции нескольких значений
- •4.9. Файлы
- •4.10. Директивы препроцессора
- •Библиографический список
4.2. Встроенные типы данных
Тип является основной характеристикой объекта и функции. Тип определяет, что и как следует делать со значениями объектов и функций. Различают скалярные и агрегатные типы данных и тип void (отсутствие типа, не имеет ни значений, ни действий) (рис. 9).
Рис. 9. Типы данных
Поскольку конкретное значение может быть зафиксировано в области памяти, которая соответствует объекту определённого типа, можно также говорить о типе значения. Значения представляются выражениями. Поэтому имеет смысл также говорить и о типе выражения. Таким образом, тип оказывается важнейшей характеристикой языка.
Тип определяет структуру и размеры объекта, диапазон и способы интерпретации его значения, множество допустимых операций (табл. 2).
Таблица 2
Типы данных
№ |
Обозначение |
Размер (байт) |
Диапазон |
Тип данных |
1 |
char, signed char |
1 |
-128...127 |
Символьный со знаком |
2 |
unsigned char |
1 |
0...255 |
Символьный без знака |
3 |
short, short int, signed short , signed short int |
2 |
-32768... 32767 |
Короткое целое со знаком |
4 |
unsigned short, unsigned short int |
2 |
0...65535 |
Короткое целое без знака |
5 |
int, signed, signed int |
1, 2, 4 |
Зависит от реализации |
Целое |
6 |
unsigned, unsigned int |
1, 2, 4 |
Зависит от реализации |
Целое без знака |
7 |
long, signed long, long int |
4 |
-2147483648… 2147483647 |
Длинное целое со знаком |
8 |
unsigned long |
4 |
0...4294967295 |
Длинное целое без знака |
9 |
float |
8 |
-3.4e-38... 3.14e+38 |
Вещественное число с плавающей точкой |
10 |
double |
8 |
-1.7е-308..1.7е308 |
Вещественное число удвоенной точности |
11 |
long double
|
10 |
-3.4e-4932... 3.4e4932 |
Длинное вещественное число удвоенной точности |
Основные типы в C++ подразделяются на две группы: целочисленные типы и типы с плавающей точкой (для краткости их будем называть плавающими типами). Это арифметические типы.
В C++ нет жёсткого стандарта на диапазоны значений арифметических типов (в стандарте языка оговариваются лишь минимально допустимые значения). К целочисленным типам относятся типы, представленные следующими именами основных типов: char, short, int и long.
Имена целочисленных типов могут использоваться в сочетании с парой модификаторов типа: signed и unsigned.
Эти модификаторы изменяют формат представления данных, но не влияют на размеры выделяемых областей памяти.
Модификатор типа signed указывает, что переменная может принимать как положительные, так и отрицательные значения. Возможно, что при этом самый левый бит области памяти, выделяемой для хранения значения, используется для представления знака. Если этот бит установлен в 0, то значение переменной считается положительным. Если бит установлен в 1, то значение переменной считается отрицательным.
Модификатор типа unsigned указывает, что переменная принимает неотрицательные значения. При этом самый левый бит области памяти, выделяемой для хранения значения, используется так же, как и все остальные биты области памяти – для представления значения.
В ряде случаев модификаторы типа можно рассматривать как имена основных типов. Особое место среди множества основных целочисленных типов занимают перечисления, которые обозначаются ключевым словом enum. Перечисления представляют собой упорядоченные наборы целых значений. Они имеют своеобразный синтаксис и достаточно специфическую область использования. Здесь также многое зависит от реализации.
Под областью видимости и областью действия переменной понимается область программы, в которой переменная доступна для использования. Для переменной, описанной в блоке (функции), область видимости простирается от точки описания до конца блока, в котором эта переменная используется. Такая переменная называется локальной. Переменная, объявленная вне функции, называется глобальной, и область ее видимости простирается от точки ее описания до конца файла.
Внутри блока (функции) глобальное имя можно переопределять для ссылки на другой объект программы. После выхода из блока глобальное имя вновь обретает прежний статус и значение. Следует отметить, что переопределение глобальных переменных в локальные в блоках при разработке крупных программных комплексов может привести к ошибкам, которые при отладке и тестировании программы очень сложно выявить, поэтому такие переопределения стоит минимизировать.
Память под локальные переменные выделяется динамически на время выполнения функции. После завершения выполнения функции эта память будет доступна для других функций, поэтому хранящиеся в локальных переменных значения не являются неизменными при последующих вызовах этой функции. Если необходимо сохранять значение локальной переменной между вызовами функций, то ее описывают с модификатором (спецификатором) static. С языке С/С++ существуют несколько модификаторов, которые определяют область видимости и время жизни переменной, т.е. к какому классу памяти она принадлежит (табл. 3).
Таблица 3.
Модификаторы переменных
Модифи-каторы |
Применение |
Область видимости |
Выделение памяти |
Пояснения |
1 |
2 |
3 |
4 |
5 |
auto |
Автоматическая локальная переменная |
Блок |
Временное
|
По умолчанию принимается для любой переменной |
register |
Регистровая локальная |
Блок |
Временное |
Как правило, размещается в машинном регистре |
extern |
Внешняя |
Блок |
|
Может описываться в другом файле; видна загрузчику |
static |
Статическая глобальная переменная |
файл |
Постоянное
|
Данная глобальная переменная недоступна другим файлам, т.е. невидна для загрузчика. |
1 |
2 |
3 |
4 |
5 |
volatile |
Изменяющаяся переменная |
|
|
Переменная может изменяться не только программой, но и например, периферийным устройством |
Скалярные автоматические переменные при их описании не обнуляются. Модификатором register рекомендуется описывать часто используемые переменные. Если пользователь, не указал инициализирующее значение для внешней или глобальной переменной, то ей будет присвоено значение 0. При каждом обращении к переменной типа volatile программа заново вычисляет ее значение.
Объявление типа данных в общем виде имеет следующий формат:
[<класс памяти>] <тип><идентификатор> = < значение> ;
Примеры объявлений: static char c, b; register int x=0;
Типизированные константы описываются как:
const <тип><идентификатор> = < значение> ;
Константы языка программирования С/С++ могут иметь различный формат записи (табл. 4).
Таблица 4.
Константы языка С/С++
Константа |
Формат |
Пример |
Символьная Целая
Вещественная
Строковая |
Символ заключенный в апострофы Десятичный Восьмеричный. Запись начинается с нуля, за которым следуют восьмеричные цифры Шестнадцатеричный. Запись начинается с 0х или 0Х, за которыми следуют шестнадцатеричные цифры Десятичный Экспоненциальный, Е – десятичное основание Совокупность символов, заключенных в кавычки |
‘d’ 123 043
0x12A
0.25 2.4E-2 “day” |