Evgenii Legotckoi
Evgenii Legotckoi12 травня 2017 р. 13:06

C++ - Підручник 002. Типи, змінні та арифметика

Кожна змінна або вираз має свій тип даних, наприклад оголошення

int some_variable;

вказує, що змінна some_variable має цілий тип int.

Оголошення дозволяє ввести певну змінну програму. Ця змінна матиме певний тип даних: цілісний, з плаваючою комою, символьний у разі базових типів даних, або кастомний тип (структура даних, клас). Тип змінної визначає набір операцій, які можна зробити над змінною. Оголошення змінної визначає виділення області пам'яті, яка потрібна для неї. Також значення цієї змінної, яке з погляду комп'ютера буде послідовністю бітів. Оголошення змінної також несе у собі те ім'я, яким програміст буде звертатися до цієї змінної в програмному коді.

У наведеному вище прикладі маємо змінну, яка має базовий цілісний тип, з якими можуть вироблятися арифметичні дії, дії порівняння, привласнення і т.д. Звертатись у програмному коді до цієї змінної будемо на ім'я some_variable.


Фундаментальні типи даних

C++ надає такі фундаментальні типи даних.

порожня

void - є типом даних із порожнім набором значень. Є незавершеним і може бути встановлений для об'єктів і змінних. Однак, можна використовувати покажчики на тип void, а також використовувати void як значення, що повертається функціями.

nullptr

nullptr - особливий тип даних, який сам собі не є типом як таким, оскільки його не можна встановити як тип змінної, але він може використовуватися як нульовий покажчик. Цей тип був введений у стандарті С++11 замість реалізованої нульової макроконстанти NULL.

логічне значення

bool - логічний тип даних, що приймає значення true або false . Розмір пам'яті, яку займає даний тип даних, може відрізнятися від 1 в залежності від реалізації в цільовій системі. Визначити розмір можна за допомогою оператора sizeof(bool).

Символьні типи

char - Символьні типи використовуються для представлення текстових символів. Розмір символьного типу Char 1 байт, що дозволяє містити 256 різних символів. Подання всіх символів можна знайти у таблиці символів ASCII.

Символьні типи даних поділяються на три типи:

  • signed char - знаковий тип
  • unsigned char - беззнаковий тип
    char - окремий тип, який може бути як знаковим, так і беззнаковим, залежно від того, як відпрацює код компілятора.

Відмінність у діапазоні значень, наприклад:

  • char -128...127
  • непідписаний символ 0...255

char може використовуватися для зберігання цілісних значень, які не перевищують одного байта, але краще використовувати для цілісних значень все-таки тип Int. Але таке допустимо для систем, що вбудовуються, з жорстко обмеженим об'ємом пам'яті.

Також є спеціальні типи символьних даних:

  • wchar_t - тип представлення символів, яким недостатньо одного байта. Це може бути 32 біти для ОС, що підтримують UNICODE, або 16 бітів у нотації Windows для UTF-16.
  • char16_t - тип представлення UTF-16, введений у стандарті C++11 .
    char32_t - тип для представлення UTF-32, введений у стандарті C++11 .

внутр

int - цілісний тип даних. Можуть використовуватися модифікатори, що визначають розмір пам'яті, що виділяється для цього типу даних. Якщо немає модифікаторів, то гарантується, що розмір типу даних не менше 16 біт. Однак, на більшості 32/64 розрядних систем гарантується, що розмір не менше 32-х біт.

Модифікатори

Знакові модифікатори

  • signed - представлення знакового типу даних (якщо опущено, то мається на увазі за умовчанням)
  • unsigned - представлення беззнакового типу даних.

Модифікатори розміру

  • short - цільовий тип оптимізується, щоб розмір був не менше 16 біт
  • long - цільовий тип оптимізується, щоб розмір був не менше 32 біт

Модифікатор long можна застосовувати типу даних двічі, що дає оптимізацію займаного змінної простору щонайменше 64 біт. Ця оптимізація введена у стандарті C++11.

long long int

Модифікатори розміру та знаковості можна також комбінувати.

підписаний довгий довгий int

Типи даних з плаваючою точкою

  • float - 32-х розрядний тип даних із плаваючою точкою.
  • double - 64-х розрядний тип даних з плаваючою точкою.
  • long double - розширений тип даних з плаваючою точкою, введений у стандарті C++11.

До речі, при розробці програмного забезпечення можна помітити використання цих типів даних, який розробник починав з чистого C, а який починав з C++. Поголовне використання float характерне для розробників, які починали з C, double характерний для C++ розробників.

Змінні

Таким чином, змінні можуть мати типи даних, перераховані вище, наприклад:

int a = 12;       // Целочисленный тип, переменная равна 12
double b = 12.25; // Вещественный тип с плавающей точкой двойной точности, переменная равна 12.25
char c = 'a';     // Символьный тип, переменная равна символу "a"

Ініціалізація змінних може здійснюватися кількома способами.

double a1 = 2.3;
double a2 = {2.3};
double a3 {2.3};

Ініціалізація з фігурними дужками було запроваджено стандарті C++11. При ініціалізації фігурними дужками забороняється неявне перетворення, тому компілятор видасть помилку у разі.

int d1 = {2.3};
int d2 {2.3};

авто

Також для оголошення змінних у стандарті C++11 було введено специфікатор auto , який дозволяє оголошувати змінну без зазначення типу. В даному випадку тип виводиться з ініціалізатора, тобто значення, яке буде надано змінній. Таким чином, auto неможливо використовувати без ініціалізатора, тобто

// Правильный, рабочий вариант
auto a = 14; 
// Не правильный вариант, не скомпилируется
auto b;
b = 15;

Специфікатор auto може використовуватися для оголошення лямбда функцій або змінних з дуже складним оголошенням, що веде до спрощення програмного коду.

Арифметика

Над змінними базовими типами можна виконувати різні арифметичні операції:

x+y   // сложение
+x    // унарный плюс
x-y   // вычитание
-x    // унарный минус
x*y   // умножение
x/y   // деление
x%y   // остаток от деления

Також можливе використання операцій порівняння:

x==y  // равно
x!=y  // не равно
x<y   // меньше чем
x>y   // больше чем
x<=y  // меньше чем или равно
x>=y  // больше чем или равно

На додаток до арифметичних та логічних операцій функціонал C++ пропонує більш специфічні операції:

x+=y  // x = x+y
++x   // increment: x = x+1
x−=y  // x = x-y
−−x   // decrement: x = x-1
x∗=y  // x =x*y
x/=y  // x = x/y
x%=y  // x = x%y
Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.

Вам це подобається? Поділіться в соціальних мережах!

KL
  • 13 травня 2017 р. 02:31

Переменная аuto доступна для использования в Qt?

Evgenii Legotckoi
  • 13 травня 2017 р. 02:41

Да, доступна. Только нужно использовать стандарт C++11, но насколько помню, Вы используете устаревшие стандарты C++, поэтому у вас вряд ли она будет работать.

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up
d
  • dsfs
  • 26 квітня 2024 р. 04:56

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:80бали,
  • Рейтинг балів4
d
  • dsfs
  • 26 квітня 2024 р. 04:45

C++ - Тест 002. Константы

  • Результат:50бали,
  • Рейтинг балів-4
d
  • dsfs
  • 26 квітня 2024 р. 04:35

C++ - Тест 001. Первая программа и типы данных

  • Результат:73бали,
  • Рейтинг балів1
Останні коментарі
k
kmssr08 лютого 2024 р. 18:43
Qt Linux - Урок 001. Автозапуск програми Qt під Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Анатолий Кононенко05 лютого 2024 р. 01:50
Qt WinAPI - Урок 007. Робота з ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
EVA
EVA25 грудня 2023 р. 10:30
Boost - статичне зв&#39;язування в проекті CMake під Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
J
JonnyJo25 грудня 2023 р. 08:38
Boost - статичне зв&#39;язування в проекті CMake під Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
G
Gvozdik18 грудня 2023 р. 21:01
Qt/C++ - Урок 056. Підключення бібліотеки Boost в Qt для компіляторів MinGW і MSVC Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
Тепер обговоріть на форумі
IscanderChe
IscanderChe30 квітня 2024 р. 04:22
Во Flask рендер шаблона не передаётся в браузер Доброе утро! Имеется вот такой шаблон: <!doctype html><html> <head> <title>{{ title }}</title> <link rel="stylesheet" href="{{ url_…
G
Gar22 квітня 2024 р. 05:46
Clipboard Как скопировать окно целиком в clipb?
DA
Dr Gangil Academics20 квітня 2024 р. 07:45
Unlock Your Aesthetic Potential: Explore MSC in Facial Aesthetics and Cosmetology in India Embark on a transformative journey with an msc in facial aesthetics and cosmetology in india . Delve into the intricate world of beauty and rejuvenation, guided by expert faculty and …
a
a_vlasov14 квітня 2024 р. 06:41
Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Евгений, добрый день! Такой вопрос. Верно ли следующее утверждение: Любое Android-приложение, написанное на Java/Kotlin чисто теоретически (пусть и с большими трудностями) можно написать и на C+…
Павел Дорофеев
Павел Дорофеев14 квітня 2024 р. 02:35
QTableWidget с 2 заголовками Вот тут есть кастомный QTableView с многорядностью проект поддерживается, обращайтесь

Слідкуйте за нами в соціальних мережах