236.10K
Category: programmingprogramming

лекция 2.10.24

1.

Переменные и типы данных в C++
Переменная – именованная область компьютерной памяти в которой хранятся
данные, где имя переменной является адресом в памяти.
Можно представить переменную в виде ящика, в котором что-нибудь имеется.
Переменная имеет тип, имя и данные, которые она хранит.
1 int apples = 10;
Здесь переменная имеет тип int и имя apples, хранит эта переменная число 10.
В языке С++ все переменные имеют определенный тип данных. Например,
переменная, имеющая целочисленный тип не может содержать ничего кроме
целых чисел, а переменная с плавающей точкой — только дробные числа.
Тип данных присваивается переменной при ее объявлении или инициализации.
1

2.

Типы данных в C++
Тип данных – это множество допустимых значений, которые может принимать тот или
иной объект, а также множество допустимых операций, которые применимы к нему.
Тип данных определяет:
1) внутреннее представление данных в памяти компьютера;
2) множество значений, которые могут принимать величины этого типа;
3) операции и функции, которые можно применять к данным этого типа.
В зависимости от требований задания программист выбирает тип для
объектов программы. Типы Си++ можно разделить на простые и составные.
К простым типам от-носят типы, которые характеризуются одним значением.
Основные типы данных в C++
int — целочисленный тип данных.
float — тип данных с плавающей запятой.
double — тип данных с плавающей запятой двойной точности.
char — символьный тип данных.
wchar_t – расширенный символьный
bool — логический тип данных.
void – пустой не имеющий значения
Объекты типа void не хранят никаких значений. Сам этот тип используется для описания
2
функции которая не возвращает никакого значения.

3.

Существует 4 спецификатора типа, уточняющих внутреннее представление и
диапазон стандартных типов
short (короткий)
long (длинный)
signed (знаковый)
unsigned (беззнаковый)
Тип int
Значениями этого типа являются целые числа.
Размер типа int не определяется стандартом, а зависит от компьютера и
компилятора. Для 16-разрядного процессора под него отводится 2 байта, для
32-разрядного – 4 байта.
Если перед int стоит спецификатор short, то под число отводится 2 байта,
а если спецификатор long, то 4 байта. От количества отводимой под объект
памяти зависит множество допустимых значений, которые может принимать
объект:
short int - занимает 2 байта (16 бит) , следовательно, имеет диапазон –
32768 ..+32767;
long int – занимает 4 байта, следовательно, имеет диапазон –2 147 483
648..+2 147 483 647
Тип int совпадает с типом short int на 16-разрядных ПК и с типом long int
3

4.

Модификаторы signed и unsigned также влияют на множество допустимых значений, которые может принимать объект:
unsigned short int - занимает 2 байта, следовательно, имеет диапазон 0 ..65536;
unsigned long int – занимает 4 байта, следовательно, имеет диапазон 0..+4 294 967
295.
Тип char
Значениями этого типа являются элементы конечного упорядоченного множества
символов. Каждому символу ставится в соответствие число, которое называется
кодом символа. Под величину символьного типа отводится 1 байт.
Тип char может использоваться со спецификаторами signed и unsigned.
В данных типа signed char можно хранить значения в диапазоне от –128 до 127.
При использовании типа unsigned char значения могут находиться в диапазоне от
0 до 255. Для кодировки используется код ASCII(American Standard Code foe
International Interchange). Символы с кодами от 0 до 31 относятся к слу-жебным и
имеют самостоятельное значение только в операторах ввода-вывода.
Величины типа char также применяются для хранения чисел из указанных
диапазонов.
4

5.

Тип wchar_t
Предназначен для работы с набором символов, для кодировки которых
недостаточно 1 байта, например Unicode. Размер этого типа, как правило,
соответствует типу short. Строковые константы такого типа записываются с
префиксом L: L“String #1”.
Тип bool
Тип bool называется логическим. Его величины могут принимать значения
true и false. Внутренняя форма представления false – 0, любое другое значение
интерпретируется как true.
Типы с плавающей точкой (вещественные типы данных).
Мы рассмотрели такие типы данных, как int и char, которые
представляют целые числа, то есть числа, у которых нет дробной части.
Теперь мы рассмотрим типы данных, позволяющие хранить другой класс
чисел — вещественный.
Переменные вещественного типа хранят числа в десятичной форме
представления, например 3.1415927, 0.0000625, -10.2. У таких чисел есть
как целая часть, стоящая слева от десятичной точки, так и дробная часть,
стоящая справа от нее.
Переменные вещественного типа предназначены для хранения вещественных чисел — тех чисел, которыми измеряются непрерывные
5
величины: температура, расстояние, площадь. Вещественные числа, как

6.

В C++ имеются три вещественных типа: float, double и long double.
Внутреннее представление вещественного числа состоит из 2 частей:
мантиссы и порядка.
Тип float
В IBM-совместимых ПК величины типа float занимают 4 байта, из которых
один разряд отводится под знак мантиссы, 8 разрядов под порядок и 24 – под
мантиссу.
Тип float способен хранить числа, содержащиеся в интервале от 3.4∗10 −38
до 3.4∗1038 , с точностью до семи знаков после запятой.
Типы double и long double
Два более крупных вещественных типа данных — double и long double
— аналогичны типу float и отличаются от него лишь размерами
занимаемой памяти, диа-пазонами значений и точностью представления.
Величины типы double занимают 8 байтов, под порядок и мантиссу
отводятся 11 и 52 разряда соответственно. Длина мантиссы определяет точность
числа, а длина порядка его диапазон.
Тип double хранит значения от 1.7∗10 −308 до 1.7∗10308 с точностью до
15 знаков после запятой. Характеристики типа long double зависят6 от

7.

Тип void
Существует особый типа данных (тип указателей) – указатели типа void
или пустые указатели. Эти указатели используются в том случае, когда тип
переменной не известен. Так как void не имеет типа, то к нему не применима
операция разадресации (взятие содержимого) и адресная арифметика, так как
неизвестно представление данных.
Тем не менее, если мы работаем с указателем типа void, то нам доступны
операции сравнения.
Таблица типов данных
Назван
ие
типа
Нижняя
граница
диапазона
Верхняя
граница
диапазона
Точност
ь
Размер в байтах
bool
False
True
Нет
1
char
-128
127
Нет
1
short
-32 768
32 767
Нет
2
int
-2 147 483 648
2 147 483 647
Нет
4
long
-2 147 483 648
2 147 483 647
Нет
4
float
3.4*10-38
3.4*1038
7
4
double
1.7* 10-308
1.7*10308
15
8
7

8.

Объявление переменной
Объявление переменной в C++ происходит таким образом: сначала указывается
тип данных для этой переменной а затем название этой переменной.
Пример объявления переменных
int a; // объявление переменной a целого типа.
float b; // объявление переменной b типа данных с плавающей запятой.
double c = 14.2; // инициализация переменной типа double.
char d = 's'; // инициализация переменной типа char.
bool k = true; // инициализация логической переменной k.
В C++ оператор присваивания (=) — не является знаком равенства и не
может использоваться для сравнения значений. Оператор равенства
записывается как «двойное равно» — ==.
Присваивание используется для сохранения определенного значение в
переменной. Например, запись вида a = 10 задает переменной a значение числа
10.
8

9.

Инициализация переменной
Когда мы объявляем переменную, мы сразу же можем дать ей значение.
Это называется инициализация переменной.
C++ поддерживает два основных способа инициализации переменных.
Первый: copy initialization (копирующая инициализация) с помощью знака
равенства:
1 int nValue = 5; // копирующая
инициализация
Второй: direct initialization (прямая инициализация) с помощью круглых
скобок.
Прямая инициализация может работать лучше для некоторых типов данных,
нежели копирующая инициализация.
Также она имеет и некоторые другие преимущества, о которых будет
написано, в разделе классы.
Рекомендуется использовать direct initialization вместо copy initialization.
1
int nValue(5); // прямая инициализация
9

10.

Преобразование типов
В C++ разделяют явное и неявное преобразование типов.
Явное преобразование типов
Используется, когда необходимо один тип данных преобразовать в другой.
Для этого перед переменной пишется в скобках тот тип к которому её нужно
привести.
Пример.
Перед нами таблица ASCII кодов. Каждый символ сопоставлен коду этого
символа. В ней букве A соответствует код 65. Значит, что в памяти компьютера
эта буква хранится как цифра 65.
Проверим. Выполним операцию явного преобразования типа и приведем
символьный тип char к целочисленному short и выведем на консоль значение.
char ch = 'A';
2 cout << ch << endl;
3 cout << (short)ch << endl;
ASCII (от англ. American Standard Code for Information Interchange – американский стандартный
код для обмена информацией) – таблица в которой каждому символу соответствует определённый
код от 0 до 255. В этой таблице закодированы английские и русские буквы, цифры и специальные
символы, хранящиеся в памяти компьютера
10

11.

Примеры:
1 char ch='F';
2
3 cout << (short)ch;
Таким кодом мы получим ASCII код символа ‘F’. То, что мы уже проделывали в
выше.
Можно провести обратную операцию:
1 int a = 65;
2
3 cout << (char)a;
На экране мы видим символ ‘А’, несмотря на то, что переменная хранит число.
При преобразовании вещественного числа в целочисленное будет отброшена
дробная часть (всё, что после запятой), таким образом теряются данные.
1 double pi=3.1415926;
2
3 cout << (int)pi;
На экране будет выведено число 3
11

12.

Спецификатор auto
Иногда бывает трудно определить тип выражения. И согласно последним
стандартам можно предоставить компилятору самому выводить тип объекта. И
для этого применяется спецификатор auto. При этом если мы определяем
переменную со спецификатором auto, эта переменная должна быть обязательно
инициализирована каким-либо значением:
1 auto number = 5;
Это называется выводом типа (или «автоматическим определением типа
данных компилятором»). Например:
1 auto x = 4.0; // 4.0 - это литерал типа double, поэтому и x должен быть типа
double
2 auto y = 3 + 4; // выражение 3 + 4 обрабатывается как целочисленное,
поэтому и переменная y должна быть типа int

13.

Неявное преобразование типов
Неявное преобразование типов происходит при присваивании переменной
одного типа переменной другого типа.
1 int a = 10;
2 double b;
3 b = a;
4
5 cout << fixed << a << endl;
6 cout << fixed << b << endl;
В данном коде значение переменной a было присвоено переменной b, при этом
произошло скрытое изменение типа.
Как мы видим число 10 стало представляться в виде 10.000000.
Мы преобразовали его из типа int к double. Для вывода числа в формате с
числами после точки (10.000000) мы воспользовались манипулятором fixed.
13

14.

Другой пример, когда типу использующему меньше памяти присваивается тип
занимающий больше памяти.
1 long a = 123456789;
2 short b;
3 b = a;
4
5 cout <<"a = "<< a << endl;
6 cout <<"b = "<< b << endl;
Таким образом мы потеряем информацию, ведь тип short не способен хранить
такие большие значения. В переменной b стал храниться «мусор».
Нужно быть очень аккуратным при использовании разных типов, ведь можно
потерять данные, при этом компилятор не сообщит об ошибке, он просто
выполнит неявное преобразование типа.
14

15.

Размер типа
Для определения количества отведенной памяти в компьютере под различный
тип необходимо воспользоваться функцией size of (имя типа), которая
возвращает количество памяти отводящуюся под тип в байтах .
cout << "Size of char = " << sizeof(char) << " byte" << endl;
cout << "Size of int = " << sizeof(int) << " byte" << endl;
cout << "Size of double = " << sizeof(double) << " byte" << endl;
sizeof
операция вычисления размера (в байтах) для объекта того типа,
который имеет операнд. Разрешены два формата операции: sizeof
унарное_выражвие и sizeof(тип).
15

16.

Русский язык в консоли C++
#include <iostream>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
cout << "Русский текст в консоли" << endl;
return 0;
}
Функция setlocale позволяет настраивать локальные, например, российские,
параметры в программе.
С помощью этой функции, например,
можно выбрать русский язык в консоли.
Также, можно опустить последний аргумент функции — setlocale(LC_ALL,
"Russian"); можно заменить на setlocale(0, ""); — работоспособность
программы от этого не изменится.
16
English     Русский Rules