У яких випадках слід використовувати типи short та long
Початківцям програмістам часто буває важко прийняти рішення про те, коли оголошувати змінну з використанням типу long, а коли з використанням типу short. Правило досить просте: якщо є хоч найменший шанс, що ваше значення буде занадто великим для передбачуваного типу, використовуйте тип з великим розміром.
Наведені у табл. 3.1 змінні типу unsigned short int, як правило, мають розмір, рівний двом байтам, і можуть зберігати значення, що не перевищує 65535. Знакові короткі цілі ділять свій діапазон між позитивними і негативними числами, тому їх максимальне значення вдвічі менше, ніж у беззнакового короткого цілого.
Хоча змінні типу unsigned long int можуть зберігати дуже велике число (4294967295), воно все-таки звичайно. Якщо вам потрібно працювати з ще більшими числами, доведеться перейти до використання типів float або double, але ви дещо програєте в точності. Змінні типу float і double можуть зберігати надзвичайно великі числа, але більшість комп'ютерів значними залишаються лише перші 7 чи 19 цифр, тобто. після зазначеної кількості цифр число заокруглюється.
Змінні з меншим розміром використовують менший обсяг пам'яті. У наші дні пам'ять стає дешевшою, а життя не таке вже й довге, щоб витрачати її на економію пам'яті. Тому віддайте перевагу типу int, який на більшості комп'ютерів має розмір чотири байти.
Переповнення беззнакових цілих
Що трапиться, якщо при використанні довгих беззнакових цілих перевищити їх граничний максимум?
Коли беззнакове ціле досягає свого максимального значення, при черговому інкременті воно скидається в нуль і починається відлік спочатку, як в автомобільному одометрі. У лістингу 3.4 показано, що станетьсяпри спробі помістити занадто велике число змінну типу short.
Листинг 3.4. Приклад переповнення беззнакової цілої змінної.
4: unsigned short int smallNumber;
5: smallNumber = 65535;
4: short int smallNumber;
5: smallNumber = 32767;
Цей приклад показує, що у разі збільшення максимального позитивного цілого числа зі знаком буде отримано не нульове значення (як у випадку з беззнаковими цілими), а мінімальне негативне число.
Символи
Символьні змінні (типу char) зазвичай займають один байт, цього достатньо для зберігання 256 значень символів, що друкуються (див. додаток В). Значення типу char можна інтерпретувати як число в діапазоні 0-255 або символ ASCII. Набір символів ASCII і його еквівалент ISO (International Standards Organization — Міжнародна організація зі стандартизації) є способом кодування всіх букв, цифр і розділових знаків.
Наприклад, у коді ASCII англійській рядковій літері "а" присвоєно значення 97. Всім великим і малим літерам, всім цифрам і розділовим знакам присвоєно значення від 1 до 128. Додаткові 128 знаків і символів зарезервовані для розширення можливостей комп'ютера, хоча розширений набір символів IBM став вже чимось на зразок стандарту.
Примітка:ASCII зазвичай вимовляється як "аскей".
Примітка:Комп'ютери не мають ні найменшого поняття, ні про які літери, розділові знаки або речення. Усі вони розуміють лише числа. Насправді вони оцінюють деякі електричні параметри в певних точках своїх схем. Якщо значення параметра, що оцінюється, вище деякої обумовленої величини, воно представляється внутрішньо як 1, якщо ні - як 0. Шляхом групування нулів іодиниць комп'ютер здатний генерувати кодові комбінації, які можна інтерпретувати як числа, а ті, у свою чергу, можна привласнити буквам і розділовим знакам.
Символи та числа
Якщо помістити якийсь символ, наприклад "а", в змінну типу char, то насправді вона зберігатиме число, що лежить в діапазоні між 0 і 255. Однак компілятор знає, як переходити від символів до їх цифрових еквівалентів ASCII і назад.
Взаємозв'язок між числом і літерою довільний, оскільки немає ніякої вагомої причини для присвоєння малої літері "а" саме значення 97. Якщо всі складові комп'ютера (ваша клавіатура, компілятор та екран) з цим "згодні", жодних проблем не виникне. Однак важливо розуміти, що між значенням 5 та символом "5" велика різниця. Символу "5" насправді відповідає значення 53, як і букві "а" відповідає число 97.
Листинг 3.6. Виведення на екран символів за їх значеннями.
4: for (int i = 32; i ?@ABCDEFGHIJKLMNOP
Ця проста програма виводить символи, значення яких лежать у діапазоні 32-127.
Спеціальні символи
Компілятор C++ розпізнає деякі спеціальні символи для форматування тексту. (Найпоширеніші з них представлені в табл. 3.2.) Щоб вставити ці символи в програму, використовується зворотний сліш (званий символом початку послідовності, що управляє), що вказує, що наступний за ним символи є керуючими. Отже, щоб вставити в програму символ табуляції, потрібно ввести одиночну лапку, зворотний сліш, букву t і знову одиночну лапку:
char tabCharacter = '\t';
У цьому прикладі оголошується змінна типу char (з ім'ям tabCharacter), яка відразу ініціалізуєтьсясимвольним значенням \t, що розпізнається як символ табуляції. Спеціальні символи форматування використовуються при виведенні інформації на екран, файл або інший пристрій виведення (наприклад, принтер).
Символ початку керуючої послідовності змінює значення символу, який слідує за ним. Наприклад, символ n означає букву я, але коли перед нею стоїть символ початку керуючої послідовності (\), то він перетворюється на символ розриву рядка.
Таблиця 3.2. Керівні символи.
Константи
Подібно до змінних, константи являють собою осередки пам'яті, призначені для зберігання даних. Але, на відміну змінних, константи не змінюються (що говорить сама назва — константа). Створювану константу потрібно ініціалізувати, оскільки пізніше їй не можна надати нове значення,
У мові C++ передбачено два типи констант: літеральні та символьні.
Літеральні константи
Літеральна константа - це значення, що безпосередньо вводиться в самій програмі. Наприклад, у виразі
myAge є змінною типу int, а число 39 - літеральною константою. Не можна надати ніяке значення константі 39.
Символьні константи
Символьна константа - це константа, представлена ім'ям (так само, як іменем представляється будь-яка змінна). Проте, на відміну змінної, значення ініціалізованої константи змінити не можна.
Якщо у вашій програмі є одна цілочисленна змінна з ім'ям students, а інша — з ім'ям classes, ви могли б обчислити загальну кількість учнів школи за умови, що вам відомо, скільки класів у школі та скільки учнів у кожному класі (припустимо, кожен клас складається з 15 учнів):
students = classes * 15;
Примітка:Символ (*) означає множення.
students = classes * studentsPerClass
Якщо згодом потрібно змінити кількість учнів у кожному класі, ви зможете зробити це один раз у тому рядку програми, де визначається константа studentsPerClass, і вам не доведеться вносити зміни до всіх рядків програми, де використовується це значення.