1. Які бувають числа?
У програмуванні ми постійно працюємо з числами — від віку користувача до кількості зірок у галактиці чи копійок на банківському рахунку. Однак різні завдання вимагають різних видів чисел: іноді важливо зберігати тільки цілі числа, іноді — дуже точні дроби, а іноді потрібні числа «без мінусів».
Цілі числа (int та інші)
Ціле число — це число без дробової частини.
У C# найчастіше використовують тип int, але окрім нього є ще кілька варіантів, які відрізняються розміром і діапазоном.
- int — основний «робочий» тип для цілих чисел. Він уміщує дуже великі (і малі) значення й водночас не займає багато памʼяті.
Наприклад, для підрахунку лайків, віку, кількості днів у році майже завжди використовують int. - long — застосовують, якщо значення можуть бути дуже великими (наприклад, мільярди чи трильйони).
Приклад: зберігати суму всіх переглядів YouTube за всю історію. - short — економний, але рідко використовуваний тип. Підходить там, де багато однакових невеликих значень (наприклад, аудіодані, колірні компоненти).
- byte — для ще менших значень, особливо у графіці та роботі з файлами, де важлива економія памʼяті.
Дробові числа (double, float, decimal)
Іноді потрібно працювати з числами, у яких є дробова частина. Наприклад, температура повітря, середній бал студента, ціна товару з копійками.
- double — це тип «за замовчуванням» для зберігання дробових чисел. Достатньо точний для більшості обчислень (приклад: 3.1415926535…).
- float — легший і менш точний тип, частіше трапляється у завданнях компʼютерної графіки чи обробці великих масивів даних, де важлива економія памʼяті.
- decimal — створений для фінансових і бухгалтерських завдань, коли важливо зберегти точність до копійки, щоб не було «втрати» через особливості зберігання дробових чисел. Наприклад, для зберігання балансу на рахунку, вартості товару, обмінного курсу.
Спеціальні числові типи
У C# є додаткові числові типи для особливих випадків:
- uint, ulong, ushort — «беззнакові» типи: дозволяють використовувати тільки нуль і додатні значення, зате діапазон удвічі більший порівняно з їх «знаковими» аналогами.
- sbyte — маленький, знаковий тип (для компактного зберігання від’ємних і додатних значень від -128 до 127).
- BigInteger — якщо потрібно працювати з величезними числами, що перевищують стандартні діапазони, наприклад, у криптографії чи обчисленнях в астрономії.
2. Знакові та беззнакові числа
Знаковий тип може зберігати як додатні, так і від’ємні числа. Це зручно, коли значення можуть бути і вище, і нижче нуля: наприклад, температура, баланс рахунку, висота відносно рівня моря.
Беззнаковий тип — тільки нуль і додатні числа. Підходить, коли від’ємного значення бути не може — наприклад, кількість людей у кімнаті, байти у файлі, час.
Приклад:
- int (знаковий): -10, 0, 50
- uint (беззнаковий): 0, 10, 1000
Використовуючи беззнаковий тип, можна вмістити у змінну удвічі більше максимального значення (бо немає «від’ємної половини діапазону»). Беззнакові типи застосовують, коли точно відомо, що значення не може бути від’ємним.
Знакові цілі типи
| Тип | Розмір | Діапазон значень | Приклад використання |
|---|---|---|---|
|
1 байт | -128 до 127 | -128, 0, 127 |
|
2 байти | -32 768 до 32 767 | -1000, 0, 32000 |
|
4 байти | -2 147 483 648 до 2 147 483 647 | -1000000, 0, 2000000 |
|
8 байт | -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 |
-10_000_000_000, 1 |
Беззнакові цілі типи
| Тип | Розмір | Діапазон значень | Приклад використання |
|---|---|---|---|
|
1 байт | 0 до 255 | 0, 128, 255 |
|
2 байти | 0 до 65 535 | 1000, 65000 |
|
4 байти | 0 до 4 294 967 295 | 100, 4000000000 |
|
8 байт | 0 до 18 446 744 073 709 551 615 | 1, 18_000_000_000_000 |
Дробові типи
| Тип | Розмір | Приклад значень | Опис |
|---|---|---|---|
|
4 байти | 3.14f, -0.001f | одинарна точність (7 цифр) |
|
8 байт | 3.1415, -1.7E+308 | подвійна точність (15–16 цифр) |
|
16 байт | 0.1m, 12345.6789m | висока точність для фінансів |
3. Суфікси для чисел
У деяких ситуаціях потрібно явно вказати, якого типу ви хочете використовувати число. Це робиться за допомогою суфіксів:
- L або l — для типу long (наприклад, 10000000000L)
- U або u — для типу uint (наприклад, 123U)
- F або f — для типу float (наприклад, 3.14f)
- D або d — для типу double (зазвичай не потрібен, бо дробові числа без суфікса — це double)
- M або m — для типу decimal (наприклад, 99.99m — особливо важливо для грошей!)
Якщо не вказати суфікс, то за замовчуванням ціле число вважається int, а дробове — double. Наприклад, 42 — це int, а 3.14 — це double.
Навіщо це потрібно? Наприклад, щоб не отримати помилку під час присвоєння великого числа змінній типу long:
long bigNumber = 9000000000L; // якщо прибрати суфікс L, виникне помилка компіляції
А для грошей краще завжди використовувати decimal із суфіксом m:
decimal price = 999.99m;
4. Роздільник у вигляді підкреслення _
Коли числа довгі, легко заплутатися в нулях. Для зручності читання у C# можна використовувати підкреслення всередині числа.
int population = 146_700_000;
long stars = 100_000_000_000L;
Це цілком коректно: компілятор ігнорує підкреслення, а вам зручно одразу «на око» бачити розряди. Головне — не ставити підкреслення на початку, у кінці, після крапки чи перед суфіксом.
5. Символьний тип char
Іноді у програмі потрібно працювати не з числами, а з окремими символами: літерою, цифрою, знаком і навіть пробілом. Для цього є спеціальний тип — char.
Що таке char?
Це змінна, яка зберігає один символ:
- латинську або кириличну літеру ('A', 'я')
- цифру ('5')
- спеціальний символ ('#', '%', '@')
- керуючий символ ('\\n' — перехід на новий рядок)
Особливості:
- Значення типу char записують в одинарних лапках: char letter = 'B';
- Насправді всередині char зберігається числовий код символу (у системі Unicode), тому char можна порівнювати, перетворювати на int і навіть виконувати просту арифметику:
char a = 'A';
char b = (char)(a + 1); // 'B'
int code = a; // 65 — код літери 'A'
Можна використовувати спеціальні символи, наприклад: char tab = '\\t'; // символ табуляції
Навіщо потрібен char?
Для роботи з текстом на рівні символів (наприклад, перевірка першої літери в рядку, пошук знаків пунктуації, зчитування пароля символ за символом).
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ