Базові типи даних мови C#
Зміст
- 1. Які є основні (базові) типи даних в мові C#?
- 2. Які особливості використання цілочисельних типів даних?
- 3. Як у програмі описати змінну з іменем d цілого типу int?
- 4. Як у змінну d цілого типу ulong занести число?
- 5. Як програмно визначити розмір змінної заданого типу?
- 6. Які особливості типів даних з плаваючою комою (дійсні типи)?
- 7. Як описати змінну дійсного типу (з плаваючою комою)?
- 8. Як програмно занести значення у змінну дійсного типу?
- 9. Як визначити скільки байт пам’яті займає одна змінна типу float, double чи decimal?
- 10. Як перевести змінну типу float в тип int?
- 11. Як перевести змінну з типу int у тип double?
- 12. Які є базові символьні типи даних в мові C#?
- 13. Які особливості використання даних типу char у програмі?
- 14. Як у програмі за кодом символу отримати його символьне представлення?
- 15. Які особливості використання змінних типу string?
- 16. Які особливості використання змінної логічного типу bool?
- 17. Яким чином здійснюється початкова ініціалізація змінних різних типів?
- 18. Яким чином визначити максимально допустиме (мінімально допустиме) значення змінної певного типу?
- 19. Приклад, що демонструє відмінність між типами double та decimal
Пошук на інших ресурсах:
1. Які є основні (базові) типи даних в мові C#?
У мові C# реалізовані наступні базові типи даних:
- Цілочисельні типи: sbyte, byte, short, ushort, int, uint, long, ulong.
- Типи, в яких зберігаються дані з плаваючою комою (дійсні типи): float, double, decimal.
- Символьний тип: char.
- Логічний тип: bool.
- Рядковий тип: string.
⇑
2. Які особливості використання цілочисельних типів даних?
У C# є такі основні цілочисельні типи даних:
sbyte, byte, short, ushort, int, uint, long, ulong.
Дані таких типів представляють собою значення з множини цілих чисел. Наприклад: -200, 8938, 1134448348.
Символи u перед назвами деяких типів є скороченням від слова unsigned. Це означає, що значення змінних цих типів є без знаку, тобто зберігати від’ємні числа у змінних цих типів неможна.
Змінні типів sbyte та byte займають 1 байт в пам’яті комп’ютера. Змінні типу short та ushort – 2 байти. Змінні типу int та uint – 4 байти. Змінні типу long та ulong – 8 байт.
⇑
3. Як у програмі описати змінну з іменем d цілого типу int?
Відповідь:
int d;
Після такого опису під змінну з іменем d буде виділено 4 байти пам’яті комп’ютера.
⇑
4. Як у змінну d цілого типу ulong занести число 398?
Для присвоєння змінній деякого значення використовується оператор присвоєння, який позначається оператором ‘=‘.
Відповідь 1. Присвоєння значення змінній після її опису.
ulong d;
d = 398;
Відповідь 2. Присвоєння значення змінній під час її опису.
ulong d = 398;
⇑
5. Як програмно визначити розмір змінної заданого типу?
Щоб визначити розмір змінної використовується операція sizeof():
int d; d = sizeof(sbyte); // d = 1 d = sizeof(short); // d = 2 d = sizeof(int); // d = 4 d = sizeof(long); // d = 8
Таким способом можна обчислити розмір в байтах змінної будь-якого базового типу.
⇑
6. Які особливості типів даних з плаваючою комою (дійсні типи)?
Типи даних з плаваючою комою оперують числовими значеннями з множини дійсних чисел. У мові C# є три основні типи даних для представлення чисел з плаваючою комою (дійсних чисел):
- float – реалізує числа одинарної точності. Цей тип є псевдонімом класу System.Single;
- double – реалізує числа подвійної точності. Цей тип відповідає класу System.Double;
- decimal – призначений для виконання обчислень, що потребують особливої точності у представленні дробової частини числа, а також мінімізації помилок округлення. Тип даних decimal доцільно застосовувати для фінансових обчислень, де питання точності є особливо важливим.
Ці типи дозволяють зберігати числа з плаваючою комою, наприклад:
2.85 -1000.399 20390239.939
У порівнянні з типом double, тип decimal не вирішує помилок округлення але мінімізує їх. Помилки округлення виникають у випадку, коли відбувається операція ділення чисел, результат якої дає дробову частину в періоді
1.0/3.0 = 0.33333(3) - число 3 в періоді
При множенні цього числа 0.33333(3) на 3 вже не буде отримане початкове число 1.0. Таким чином відбувається втрата точності. Тип decimal призначений для зменшення цих втрат точності за рахунок збільшення кількості розрядів у дробовій частині числа.
⇑
7. Як описати змінну дійсного типу (з плаваючою комою)?
Приклад опису змінних типу float, double, decimal:
float x; double y; decimal z;
Тут описується три змінні з іменами x, y, z. Під змінну x виділяється 4 байти пам’яті, під змінну y виділяється 8 байт, під змінну z виділяється 16 байт.
⇑
8. Як програмно занести значення у змінну дійсного типу?
Приклад внесення числових даних у змінні дійсних типів:
float f = (float)9030.939; // початкова ініціалізація double d; decimal z; d = -392093828.3993; z = (decimal)390209.3099029;
У даному коді, при внесенні даних у змінну f, відбувається переведення числового значення 9030.939 у тип float. Так само відбувається переведення числа для змінної z у тип decimal. Таке перетворення є необхідним для дійсних типів, тому що усі числові значення є типу double.
⇑
9. Як визначити скільки байт пам’яті займає одна змінна типу float, double чи decimal?
Щоб визначити це, потрібно написати такий програмний код:
int d; d = sizeof(float); // d = 4 d = sizeof(double); // d = 8 d = sizeof(decimal); // d = 16
⇑
10. Як перевести змінну типу float в тип int?
Для цього використовується операція приведення типів. У дужках потрібно вказати назву типу до якого відбувається приведення.
Приклад:
float a; int b; a = (float)23.789; b = (int)a; // b = 23
При використанні операцій приведення типів, потрібно враховувати обмеження, що накладаються на типи, які займають менше місця в пам’яті комп’ютера.
Наприклад, змінна типу short може представляти менший діапазон чисел, ніж змінні типу float, double. У наступному лістингу відбувається переповнення значення у змінній типу short:
short i; float f; f = (float)35748473.8; i = (short)f; // i = 31352 - переповнення
⇑
11. Як перевести змінну з типу int у тип double?
Приклад приведення з int в double:
int i; double d; i = 3998; d = (double)i;
⇑
12. Які є базові символьні типи даних в мові C#?
Відповідь: char, string
Тип string представляє послідовність символів.
Змінні типу char можуть отримувати значення одного символу. Значення змінної типу char взяте в одинарні лапки, наприклад:
'A' '4' ';'
Змінна типу char представляє собою одиночний символ Unicode. Така змінна займає в пам’яті комп’ютера 2 байти.
Змінні типу string це рядки символів, які взяті в подвійні лапки, наприклад:
"This is a string"
Змінна типу string в C# може мати будь-яку довжину (кількість символів).
⇑
13. Які особливості використання даних типу char у програмі?
Дані типу char представляють символьне значення коду, введеного з клавіатури. Код символу представляє собою ціле число.
Наприклад, код символу ‘f‘ рівний значенню 102.
Фрагмент коду, в якому обчислюється код символу:
int code; char symbol; symbol = 's'; code = (int)symbol; // code = 115
Тобто, дані типу char є тими самими цілими числами. Дані типу char займають в пам’яті комп’ютера 1 байт.
Співвідношення “символ-код” розміщується у таблиці символів Windows. Символи з кодами від 0 до 127 – це зарезервовані символи BIOS. Вони включають найбільш вживані символи, символи цифр, символи латинської абетки. Ці символи змінити неможна.
Символи з кодами від 128 до 255 – це регіональні символи, що прив’язані до конкретної абетки того комп’ютера на якому встановлена операційна система Windows.
⇑
14. Як у програмі за кодом символу отримати його символьне представлення?
Фрагмент програмного коду, який переводить код (ціле число) в символ (тип char):
int code; char symbol; code = 115; symbol = (char)code; // symbol = 's'
⇑
15. Які особливості використання змінних типу string?
Змінні типу string представляють собою рядки. Максимальна довжина рядка не обмежена.
Приклад опису змінної типу string з іменем s1.
string s1;
Приклад внесення рядка у змінні типу string:
string s1 = "Text-1"; string s2; s2 = "Text-2"; char c; c = s2[0]; // Символ з індексом 0. c = 'T'
Зі змінними типу string можна виконувати різноманітні операції. Детальний опис поширених операцій зі змінною типу string описано тут.
⇑
16. Які особливості використання змінної логічного типу bool?
Змінна логічного типу bool визначає лише два стани: “істина” та “не істина”. Змінна типу bool може приймати лише два значення: true, false.
Приклад використання змінної типу bool:
bool b1, b2 = true; b1 = (6 <= 5); // b1 = false
⇑
17. Яким чином здійснюється початкова ініціалізація змінних різних типів?
int d = 231; float z = (float)-23.15; char c = 'k'; string s = "Hello!"; double r = -32.593; bool b = true;
⇑
18. Яким чином визначити максимально допустиме (мінімально допустиме) значення змінної певного типу?
Щоб визначити максимально допустиме чи мінімально допустиме значення змінної деякого типу в бібліотеці .NET Framework використовуються властивості MaxValue та MinValue.
Приклади визначення граничних значень змінних різних типів.
Для змінних типу int:
// тип int int i; int MaxI; int MinI; MaxI = int.MaxValue; // MaxI = 2147483647 MinI = int.MinValue; // MinI = -2147483648
Для змінних типу ulong:
// тип ulong ulong i; ulong MaxUL; ulong MinUL; MaxUL = ulong.MaxValue; // MaxUL = 18446744073709551615 MinUL = ulong.MinValue; // MinUL = 0
Для змінних типу float:
float f; float MaxF; float MinF; MaxF = float.MaxValue; // MaxF = 3.402823E+38 MinF = float.MinValue; // MinF = -3.402823E+38
⇑
19. Приклад, що демонструє відмінність між типами double та decimal
У нижченаведеному прикладі демонструється відмінність в округленні між типами double та decimal.
При діленні числа 1.0 на число 3.0 для обох типів відбувається втрата точності, що є природно. При множенні отриманого результату на 3.0 відбувається наступне:
- для типу double результат стає рівний 1.0. Це означає, що відбулось округлення числа 0.3(3) компілятором. Таке округлення у деяких випадках (наприклад, фінансових розрахунках) є небажаним;
- для типу decimal результат стає рівний 0.9(9). Це означає, що зворотна операція множення для типу decimal виконується без округлення. Отже, тип decimal зменшує помилки втрати точності для дійсних чисел порівняно з типом double.
Текст демонстраційної програми типу Console Application наступний:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication8 { class Program { static void Main(string[] args) { // Відмінність між типами double та decimal, демонстрація // 1. Оголошення змінних типів double та decimal double dbl; decimal dcm; // 2. Ділення 1.0/3.0 - відбувається втрата точності для обох типів dbl = 1.0 / 3.0; // dbl = 0,333333333333333 dcm = Decimal.One / (decimal)3.0; // dcm = 0,3333333333333333333333333333 // 3. Виведення на екран результату ділення Console.WriteLine("dbl = {0}", dbl); Console.WriteLine("dcm = {0}", dcm); // 4. Множення на 3.0 // тип double робить округлення, // тобто відбувається втрата точності в цьому напрямку (при множенні) dbl = dbl * 3.0; // dbl = 1.0 // тип decimal округлення не робить, // округлення немає, а, отже немає і втрати точності dcm = dcm * (decimal)3.0; // dcm = 0,9999999999999999999999999999 // 5. Виведення результату для перевірки Console.WriteLine("dbl = {0}", dbl); Console.WriteLine("dcm = {0}", dcm); Console.ReadKey(); } } }
Результат виконання програми
dbl = 0,333333333333333 dcm = 0,3333333333333333333333333333 dbl = 1 dcm = 0,9999999999999999999999999999
⇑