Основні (базові) типи даних C++
- 1. Які є основні типи даних у мові C++?
- 2. Які особливості використання цілочисельних типів даних?
- 3. Як у програмі описати змінну з іменем x цілого типу?
- 4. Як у змінну цілого типу записати число?
- 5. Які особливості типів даних з плаваючою комою?
- 6. Як описати змінну, яка приймає значення з плаваючою комою?
- 7. Як в змінну з плаваючою комою записати числові значення?
- 8. Як перевести змінну типу float в тип int?
- 9. Як перевести змінну з типу int в тип double?
- 10. Які особливості використання даних типу char (символьних даних) у програмі?
- 11. Які особливості використання даних типу bool (логічний тип)?
- 12. Як визначити розмір того чи іншого типу в C++?
- 13. Яким чином здійснюється ініціалізація змінних різних типів?
- 14. Яким чином визначити максимально допустиме (мінімально допустиме) значення змінної певного типу?
- 15. Які особливості використання типу enum?
- 16. Які особливості застосування типу void в програмах на C++? Покажчик на void
- 17. Чи можна оголошувати змінну типу void в програмі?
- 18. Які особливості застосування типу wchar_t у Visual C++?
- 19. Який об’єм пам’яті резервується для опису однієї змінної типу wchar_t?
- 20. Як визначити, яке максимальне (мінімальне) значення може містити змінна цілочисельного або символного типу? Константи INT32_MIN, INT32_MAX та інші
- Зв’язані теми
Пошук на інших ресурсах:
1. Які є основні типи даних у мові C++?
Відповідь:
- Цілочисельні типи даних:
short int, unsigned short int, int, unsigned int, long, unsigned long, long long, unsigned long long
- Типи даних з плаваючою комою (дійсні типи):
float, double, long double
- Символьний тип даних:
char (signed char), unsigned char, wchar_t
- Логічний тип даних:
bool
- Перечислювальний тип даних (введений у Visual C++):
enum
⇑
2. Які особливості використання цілочисельних типів даних?
В C++ реалізовано такі основні цілочисельні типи даних:
short int unsigned short int int unsigned int long (long int) unsigned long (unsigned long int) long long unsigned long long
Ці типи даних представляють значення з множини цілих чисел. Наприклад:
2 -100 398 209320320932
Типи даних, що починаються з приставки unsigned, можуть містити тільки додатні (беззнакові) числа.
Дані типу short int, unsigned short int займають у два рази менше місця в пам’яті ніж дані типу int, unsigned int. У нових версіях компілятора дані типу short int займають 2 байти.
У старіших версіях компіляторів дані типу long, unsigned long займають у два рази більше місця в пам’яті ніж дані типу int, unsigned int. В останніх версіях компіляторів дані типу int (unsigned int) займають таке саме місце в оперативній пам’яті як і дані типу long (unsigned long).
Дані типу long long (unsigned long long) займають у 2 рази більше місця в пам’яті ніж дані типу long (unsigned long).
Приклад. У прикладі визначається розмір даних цілочисельного типу з допомогою інструкції sizeof. Більш детально про оператор sizeof можна прочитати тут.
#include <iostream> using namespace std; void main() { // Розмір в байтах різних цілочисельних типів cout << "sizeof(short int) = " << sizeof(short int) << endl; cout << "sizeof(unsigned short int) = " << sizeof(unsigned short int) << endl; cout << "sizeof(int) = " << sizeof(int) << endl; cout << "sizeof(unsigned int) = " << sizeof(unsigned int) << endl; cout << "sizeof(long) = " << sizeof(long) << endl; cout << "sizeof(unsigned long) = " << sizeof(unsigned long) << endl; cout << "sizeof(long long) = " << sizeof(long long) << endl; cout << "sizeof(unsigned long long) = " << sizeof(unsigned long long) << endl; }
Результат виконання програми:
sizeof(short int) = 2 sizeof(unsigned short int) = 2 sizeof(int) = 4 sizeof(unsigned int) = 4 sizeof(long) = 4 sizeof(unsigned long) = 4 sizeof(long long) = 8 sizeof(unsigned long long) = 8
Проаналізувавши результат, можна прийти до висновку, що в нових версіях компіляторів:
- змінні типів short int та unsigned short int займають 2 байти;
- змінні типів int, unsigned int, long (long int), unsigned long (unsigned long int) займають 4 байти;
- змінні типів long long (unsigned long long) займають 8 байт.
⇑
3. Як у програмі описати змінну з іменем x цілого типу?
Відповідь:
int x; // ціле зі знаком
У результаті під змінну x буде виділене місце в пам’яті розміром 4 байти. Розмір пам’яті, що виділяється під змінну залежить від характеристик комп’ютера, типу операційної системи та налаштувань компілятора.
⇑
4. Як у змінну цілого типу записати число 239?
Для цього використовується оператор присвоєння, який позначається символом ‘=‘.
Відповідь 1. Внесення числа у змінну після її опису.
int x;
x = 239;
Відповідь 2. Внесення числа у змінну під час її опису (початкова ініціалізація).
int x = 239;
⇑
5. Які особливості типів даних з плаваючою комою?
Типи даних з плаваючою комою дозволяють представляти значення з множини дійсних чисел. Наприклад:
8.35 -990.399 239.0
У C++ є такі основні типи даних з плаваючою комою: float, double, long double.
Змінна типу double займає в 2 рази більше місця в пам’яті комп’ютера ніж змінна типу float.
Так само змінна типу long double займає в 2 рази більше місця в пам’яті комп’ютера, ніж змінна типу double.
⇑
6. Як описати змінну, яка приймає значення з плаваючою комою?
Приклад опису змінних типу float, double, long double:
float f; double d; long double ld;
⇑
7. Як в змінну з плаваючою комою записати числові значення?
Приклад внесення числових даних в змінні типів з плаваючою комою:
float f = -9928.45; // початкова ініціалізація double d; long double ld; d = 0.445332; // оператор присвоєння ld = 3892923898239.030903; // оператор присвоєння
⇑
8. Як перевести змінну типу float в тип int?
Для цього використовується операція приведення типів. У дужках потрібно вказати назву типу до якого відбувається приведення.
Приклад:
float a; int b; a = 8.457; b = (int) a; // b = 8
При використанні операцій приведення типів, потрібно враховувати обмеження, що накладаються на типи, які займають менше місця в пам’яті комп’ютера.
Наприклад, змінна типу short int може представляти менший діапазон чисел, ніж змінні типу float, double. У наступному лістингу відбувається переповнення значення у змінній типу short int:
short int i; float f; f = 3990099.8; i = (int)f; // i = -7597 - переповнення
⇑
9. Як перевести змінну з типу int в тип double?
Приклад приведення з int в double:
int i; double d; i = 982; d = (double)i; // d = 982.0
⇑
10. Які особливості використання даних типу char (символьних даних) у програмі?
Дані типу char представляють символьне значення коду, введеного з клавіатури. Код символу представляє собою ціле число.
Наприклад, код символу ‘f’ рівний значенню 102.
Фрагмент коду, в якому обчислюється код символу:
int code; char symbol; symbol = 'f'; code = (int)symbol; // code = 102
Тобто, дані типу char є тими самими цілими числами. Дані типу char займають в пам’яті комп’ютера 1 байт.
Співвідношення “символ-код” розміщується у таблиці символів Windows. Символи з кодами від 0 до 127 – це зарезервовані символи BIOS. Вони включають найбільш вживані символи, символи цифр, символи латинської абетки. Ці символи змінити неможна.
Символи з кодами від 128 до 255 – це регіональні символи, що прив’язані до конкретної абетки того комп’ютера на якому встановлена операційна система Windows.
⇑
11. Які особливості використання даних типу bool (логічний тип)?
Змінні типу bool можуть приймати тільки два значення:
- true – істина,
- false – фальш (неістина).
Ці змінні використовуються для перевірки логічних виразів. Числове значення true рівне 1. Числове значення false рівне 0.
Фрагмент коду, що визначає числові значення true та false:
int result; bool b; result = (int)true; // result = 1 b = false; result = (int)b; // result = 0
Фрагмент коду, що перетворює типи int та float в bool:
int i; float f; bool b; i = 6; b = (bool)i; // b = True f = 0.0; b = (bool)f; // b = False
⇑
12. Як визначити розмір того чи іншого типу в C++?
Для цього використовується операція sizeof().
Фрагмент коду, що визначає розмір деяких типів даних:
int d; d = sizeof(char); // d = 1 d = sizeof(unsigned int); // d = 4 d = sizeof(float); // d = 4 d = sizeof(double); // d = 8
⇑
13. Яким чином здійснюється ініціалізація змінних різних типів?
int d = 28; float z = (float)2.85; char c = 'k'; String ^s = "Hello!"; double r = -8.559;
⇑
14. Яким чином визначити максимально допустиме (мінімально допустиме) значення змінної певного типу?
Щоб визначити максимально допустиме чи мінімально допустиме значення змінної деякого типу в бібліотеці .NET Framework використовуються властивості MaxValue та MinValue.
Приклади визначення граничних значень змінних різних типів.
Для змінних типу int:
// тип int int i; long MaxInt; long MinInt; MaxInt = (long)i.MaxValue; // MaxInt = 2147483647 MinInt = (long)i.MinValue; // MinInt = -2147483648
Для змінних типу short int:
// тип short int short int si; int MaxInt; int MinInt; MaxInt = (int)si.MaxValue; // MaxInt = 32767 MinInt = (int)si.MinValue; // MinInt = -32768
Для змінних типу unsigned int:
// тип unsigned int unsigned int ui; unsigned int MaxInt; unsigned int MinInt; MaxInt = ui.MaxValue; // MaxInt = 4294967295 MinInt = ui.MinValue; // MinInt = 0
Для змінних типу float:
// тип float float f; float MaxF; float MinF; MaxF = f.MaxValue; // MaxF = 3.402823E+38 MinF = f.MinValue; // MinF = -3.402823E+38
Для змінних типу double:
// тип double double d; double MaxD; double MinD; MaxD = d.MaxValue; // MaxD = 1.79769313486232E+308 MinD = d.MinValue; // MinD = -1.79769313486232E+308
Для змінних типу char:
// тип char char c; int MaxC; int MinC; MaxC = (int)c.MaxValue; // MaxC = 127 MinC = (int)c.MinValue; // MinC = -128
⇑
15. Які особливості використання типу enum?
Тип enum – це перечислювальний тип даних. В ньому задаються мнемонічні значення для множин цілих значень. Кожне мнемонічне значення має певний зміст і позначається цілим числом.
Приклад використання типу enum для позначення місяців року:
enum months { January, February, March, April, May, June, July, August, September, October, November, December } mn; mn = January; // mn = 0 mn = March; // mn = 2 mn = September; // mn = 8
У наведеному прикладі описується змінна з іменем mn типу enum months. Мнемонічні значення місяців (January, February, …) починаються з 0 (0, 1, 2, …). Мнемонічному значенню January відповідає ціле значення 0, мнемонічному значенню February відповідає ціле значення 1, і т.д.
Отже, завдяки типу enum, у тексті програми можна використовувати мнемонічні позначення для кращої наочності вихідного коду.
Можна написати й так:
mn = (enum months)2; // mn = March mn = (enum months)11; // mn = December
⇑
16. Які особливості застосування типу void в програмах на C++? Покажчик на void
Тип даних void використовується у наступних випадках:
- коли потрібно описати функцію, яка не повертає ніякого значення (див. приклад);
- коли потрібно описати функцію, яка не отримує параметрів (див. приклад);
- якщо потрібно оголосити покажчик на void, який може взаємодіяти з покажчиками на інші типи (дивіться приклад нижче). У даному випадку, покажчик на void може бути приведений до типу покажчика на будь-який інший тип (int*, float*, double* і т.д.)
Приклад 1. Функція MyFun() без параметрів, яка не повертає ніякого значення (повертає тип void) і не отримує параметрів.
public: void MyFun(void) { // тіло функції // ... return; // повернення з функції, яка не повертає значення } // виклик функції з програми ... MyFun(); ...
Приклад 2. У прикладі демонструються деякі особливості використання покажчика на void.
#include <iostream> using namespace std; void main() { // Оголосити покажчик на void void *pVoid; // Оголосити покажчики на інші типи int *pInt = new int; float *pFloat = new float; char *pChar = new char; double *pDouble = new double; // Заповнити значення за покажчиками на інші типи *pInt = 25; *pFloat = (float)3.88; *pChar = '+'; *pDouble = 17.25; // Присвоїти покажчику на void значення покажчиків на інші типи // - на покажчик на тип float pVoid = pFloat; // покажчик pVoid вказує на область пам'яті pFloat *(float*)pVoid = 85.77; // змінити значення *pFloat cout << "*pFloat = " << *pFloat << endl; // *pFloat = 85.77 // - на покажчик типу char* pVoid = pChar; *(char*)pVoid = 'a'; cout << "*pChar = " << *pChar << endl; // *pChar = a // ----------------------------------------------------------------- // Використати покажчик на void для обміну значеннями покажчиків на int int *p1 = new int; int *p2 = new int; // заповнити значеннями пам'ять, на яку вказують покажчики p1, p2 *p1 = 28; *p2 = 35; cout << "*p1 = " << *p1 << endl; // *p1 = 28 cout << "*p2 = " << *p2 << endl; // *p2 = 35 // обмін значеннями покажчиків з допомогою покажчика на void pVoid = p1; p1 = p2; p2 = (int*)pVoid; cout << "*p1 = " << *p1 << endl; // *p1 = 35 cout << "*p2 = " << *p2 << endl; // *p2 = 28 }
Результат виконання програми
*pFloat = 85.77 *pChar = a *p1 = 28 *p2 = 35 *p1 = 35 *p2 = 28
⇑
17. Чи можна оголошувати змінну типу void в програмі?
Не можна, Тому що тип void не зв’язаний зі значенням. Оголошення змінної типу void призводить до помилки компіляції з повідомленням:
"Illegal use of type void".
Однак, можна оголосити покажчик на void.
⇑
18. Які особливості застосування типу wchar_t у Visual C++?
Змінні типу char (дивіться попередні пункти) використовуються для зберігання 8-розрядних ASCII-символів.
Тип wchar_t використовується для зберігання символів, що входять у склад великих символьних наборів. Наприклад, у китайській абетці є величезна кількість символів. 8 розрядів є недостатньо, щоб представити увесь набір символів китайської абетки. Тому, якщо потрібно використовувати програму на міжнародному ринку, доцільно замінити тип char на wchar_t.
Приклад використання типу wchar_t.
... wchar_t t; // для змінної t виділяється 2 байти пам'яті t = 's'; ...
⇑
19. Який об’єм пам’яті резервується для опису однієї змінної типу wchar_t?
Одна змінна типу wchar_t займає в пам’яті комп’ютера 2 байти (16 біт). Діапазон цілочисельних значень змінних типу wchar_t становить від 0 до 65535.
⇑
20. Як визначити, яке максимальне (мінімальне) значення може містити змінна цілочисельного або символьного типу? Константи INT32_MIN, INT32_MAX та інші
Значення, які може отримати змінна цілого або символьного типу, визначається кількістю розрядів, які визначені компілятором для представлення цього типу в пам’яті.
Наприклад, якщо змінна цілого типу займає 2 байти (16 біт), то діапазон допустимих значень може бути таким:
- для знакових змінних: -32768 … 32767;
- для беззнакових змінних (з приставкою unsigned): 0 … 65535.
В C++ є засоби для визначення мінімального та максимального значення, яке може приймати змінна цілочисельного або символьного типу. У бібліотеку C++ входить модуль <limits.h>, який містить опис відповідних констант. Ці константи можна використовувати у програмах при перехопленні різноманітних виключних ситуацій, наприклад, переповнення, вихід за межі індексу в масиві тощо.
Наприклад, щоб порівняти значення змінної типу int на максимальне, можна використати константу INT32_MAX за зразком, як показано нижче
... // Визначення моменту, коли відбувається переповнення int i = 0; while (1) { // збільшити лічильник i++; // деякі операції // ... // порівняти на максимально-допустиме значення if (i == INT32_MAX) { cout << "Error. Overflow."; return; } } ...
Приклад. Нижченаведений приклад демонструє використання обмежувальних констант для символьних та цілочисельних типів.
#include <iostream> using namespace std; void main() { // Символьні типи даних - максимальні та мінімальні значення cout << "SCHAR_MIN = " << SCHAR_MIN << endl; // char - мінімальне значення cout << "SCHAR_MAX = " << SCHAR_MAX << endl; // char - максимальне значення cout << "USCHAR_MAX = " << UCHAR_MAX << endl; // unsigned char - максимум // Цілочисельні типи даних - максимальні та мінімальні значення cout << "SHRT_MIN = " << SHRT_MIN << endl; // short int - мінімальне значення cout << "SHRT_MAX = " << SHRT_MAX << endl; // short int - максимальне значення cout << "USHRT_MAX = " << USHRT_MAX << endl; // unsigned short int - максимум cout << "INT16_MAX = " << INT16_MAX << endl; // int (16 розрядне) - мінімум cout << "INT16_MIN = " << INT16_MIN << endl; // int (16 розрядне) - максимум cout << "UINT16_MAX = " << UINT16_MAX << endl; // unsigned int - максимум cout << "INT32_MIN = " << INT32_MIN << endl; // int (32-розрядне) - мінімум cout << "INT32_MAX = " << INT32_MAX << endl; // int (32-розрядне) - максимум cout << "UINT32_MAX = " << UINT32_MAX << endl; // unsigned int - максимум cout << "LONG_MIN = " << LONG_MIN << endl; // long int - мінімум cout << "LONG_MAX = " << LONG_MAX << endl; // long int - максимум cout << "ULONG_MAX = " << ULONG_MAX << endl; // unsigned long - максимум cout << "LLONG_MAX = " << LLONG_MAX << endl; // long long - максимум cout << "LLONG_MIN = " << LLONG_MIN << endl; // long long - мінімум cout << "ULLONG_MAX = " << ULLONG_MAX << endl; // unsigned long long - максимум }
Результат виконання програми
SCHAR_MIN = -128 SCHAR_MAX = 127 USCHAR_MAX = 255 SHRT_MIN = -32768 SHRT_MAX = 32767 USHRT_MAX = 65535 INT16_MAX = 32767 INT16_MIN = -32768 UINT16_MAX = 65535 INT32_MIN = -2147483648 INT32_MAX = 2147483647 UINT32_MAX = 4294967295 LONG_MIN = -2147483648 LONG_MAX = 2147483647 ULONG_MAX = 4294967295 LLONG_MAX = 9223372036854775807 LLONG_MIN = -9223372036854775808 ULLONG_MAX = 18446744073709551615
⇑
Зв’язані теми
- Ідентифікатори, зарезервовані слова, літерали, управляючі послідовності
- Поняття змінної. Оголошення змінної. Виділення пам’яті для змінної. Константи
- Поняття виразу. Операція присвоєння. Перетворення та приведення типів