Переменные и типы данных

Переменная — это именованное место для хранения значения. Робот может хранить скорость, расстояние, номер режима или состояние кнопки. Тип переменной сообщает компилятору, какие значения допустимы и какие действия с ними можно выполнять.
У переменной есть тип, имя и значение. Перед чтением переменной значение нужно задать. Не полагайтесь на случайное начальное содержимое памяти.
Простые переменные
#include <iostream>
using namespace std;
int main() {
int speed = 80;
int dist = 25;
cout << speed << endl;
cout << dist << endl;
return 0;
}
Знак = в объявлении задаёт начальное значение. В первых уроках используем именно такую запись: она привычна и легко читается.
Основные типы
Размеры и точные диапазоны зависят от платформы, но для первого понимания удобно держать в голове такую таблицу:
| Тип | Что хранит | Частый размер | Примерный диапазон значений | Пример |
|---|---|---|---|---|
int | целые числа | обычно 4 байта на ПК, иногда 2 байта на микроконтроллере | при 4 байтах: от -2147483648 до 2147483647; при 2 байтах: от -32768 до 32767 | int x = 10; |
unsigned int | целые числа без минуса | обычно 4 байта на ПК, иногда 2 байта на микроконтроллере | при 4 байтах: от 0 до 4294967295; при 2 байтах: от 0 до 65535 | unsigned int count = 42; |
long int | большие целые числа | обычно 4 или 8 байт | при 4 байтах: от -2147483648 до 2147483647; при 8 байтах: примерно от -9.22e18 до 9.22e18 | long int time = 1000; |
unsigned long int | большие целые числа без минуса | обычно 4 или 8 байт | при 4 байтах: от 0 до 4294967295; при 8 байтах: от 0 до примерно 1.84e19 | unsigned long int ticks = 1000; |
float | дробные числа | обычно 4 байта | примерно от -3.4e38 до 3.4e38, но с ограниченной точностью | float volt = 4.7; |
double | более точные дробные числа | обычно 8 байт на ПК | примерно от -1.7e308 до 1.7e308, но с ограниченной точностью | double pi = 3.14; |
char | один символ | 1 байт | обычно от -128 до 127 или от 0 до 255, зависит от компилятора | char key = 'A'; |
bool | истина или ложь | обычно 1 байт | true или false | bool ok = true; |
string | строку текста | зависит от длины строки | ограничен доступной памятью | string name = "robot"; |
long и long int означают один и тот же тип. Для string обычно подключают заголовок <string>. На микроконтроллерах размеры могут отличаться. Если размер критичен, нужно смотреть документацию платы или проверять тип через sizeof.
Перед чтением задайте значение
Плохой пример:
#include <iostream>
using namespace std;
int main() {
int speed;
cout << speed << endl;
return 0;
}
Переменная speed создана, но значение ей не задано. На одном компьютере вы можете увидеть 0, на другом — случайное число. На микроконтроллере такая ошибка особенно неприятна: устройство может начать работать с мусорным значением.
Правильно:
#include <iostream>
using namespace std;
int main() {
int speed = 0;
cout << speed << endl;
return 0;
}
Изменение значения
#include <iostream>
using namespace std;
int main() {
int speed = 0;
cout << speed << endl;
speed = 50;
cout << speed << endl;
speed = speed + 10;
cout << speed << endl;
return 0;
}
Вывод:
0
50
60
В строке speed = speed + 10; правая часть сначала вычисляется, затем результат записывается обратно в переменную.
Математические операции
| Операция | Запись | Пример результата |
|---|---|---|
| сложение | a + b | 7 + 3 даёт 10 |
| вычитание | a - b | 7 - 3 даёт 4 |
| умножение | a * b | 7 * 3 даёт 21 |
| деление | a / b | 7 / 3 для int даёт 2 |
| остаток | a % b | 7 % 3 даёт 1 |
Пример:
#include <iostream>
using namespace std;
int main() {
int a = 7;
int b = 3;
cout << a + b << endl;
cout << a / b << endl;
cout << a % b << endl;
return 0;
}
Математические функции
Для некоторых вычислений подключают библиотеку cmath. Это отдельная тема, но самые частые функции полезно увидеть рано.
| Функция | Что делает | Пример |
|---|---|---|
sqrt(x) | квадратный корень | sqrt(25) даёт 5 |
pow(a, b) | степень | pow(2, 3) даёт 8 |
abs(x) | модуль числа | abs(-7) даёт 7 |
round(x) | округление до ближайшего целого | round(3.6) даёт 4 |
#include <iostream>
#include <cmath>
using namespace std;
int main() {
double x = 25;
cout << sqrt(x) << endl;
return 0;
}
Локальные и глобальные переменные
Переменная, созданная внутри main, называется локальной. Она доступна только внутри своих фигурных скобок.
#include <iostream>
using namespace std;
int speed = 10;
int main() {
int dist = 20;
cout << speed << endl;
cout << dist << endl;
return 0;
}
speed создана вне main, поэтому её называют глобальной. В первых программах лучше чаще использовать локальные переменные: их проще контролировать. Глобальные переменные удобны для простых настроек, но в больших программах из-за них сложнее понять, кто изменил значение.
Практика
- Создайте переменные
speed,dist,timeи задайте им значения. - Выведите каждую переменную на отдельной строке.
- Посчитайте
sum = speed + distи выведите результат. - Проверьте разницу между
7 / 3и7.0 / 3.0. - Подключите
cmathи выведите квадратный корень из64.
Проверьте себя
- Из каких трёх частей состоит объявление переменной?
- Почему нельзя читать переменную до задания значения?
- Чем
intотличается отdouble? - Что делает операция
%? - Почему размеры типов могут отличаться на разных платах?
- Чем локальная переменная отличается от глобальной?
Сначала ответьте без подсказки. Ответ можно считать полным, если вы:
- формулируете основную мысль своими словами;
- называете важные условия, ограничения или меры безопасности;
- для схемы, кода или расчёта показываете ход решения и ожидаемый результат.
Если один из пунктов объяснить не получается, найдите соответствующую главу статьи, перечитайте её и повторите ответ.
Словарь статьи
| Термин | Значение |
|---|---|
| переменная | именованное место для хранения значения |
| тип | правило для допустимых значений и операций |
| инициализация | задание первого значения |
| присваивание | запись нового значения |
| локальная переменная | переменная внутри блока |
| глобальная переменная | переменная вне функций |
| байт | единица размера памяти |
Связанные темы
- Именование — как выбирать понятные имена.
- Ввод и вывод — как читать значения с клавиатуры.
- Преобразование типов — что происходит при смешивании
intиdouble.
Источники
- C++ Working Draft. Fundamental types: https://eel.is/c++draft/basic.fundamental
- Microsoft Learn. Fundamental types: https://learn.microsoft.com/en-us/cpp/cpp/fundamental-types-cpp
- C++ reference. Numerics library: https://en.cppreference.com/w/cpp/numeric/math