Типи, що вибираються компілятором за умовчанням для цілих констант

Восьмеричні цілі константи починаються завжди з нуля. Якщо запису вісімкової константи зустрінеться неприпустима цифра 8 чи 9, це сприймається як помилка. Діапазон допустимих значень для позитивних вісімкових констант від 00 до 037777777777. Для негативних вісімкових констант значення не повинно перевищувати 020000000000.

Послідовність шістнадцяткових цифр, якій передує 0x, вважається шістнадцятковою константою. До шістнадцяткових цифр крім десяткових входять латинські літери від a (або A) до f (або F). Діапазон допустимих значень для позитивних шістнадцяткових констант від 0х0 до 0хffffffff. Для негативних шістнадцяткових констант значення має перевищувати 0х80000000.

Якщо програміста з якихось причин не влаштовує тип даних присвоюється компілятором за умовчанням константі, він може змінити тип за допомогою суфікса L, l (long) і U, u (unsigned) чи його поєднання ul, UL (unsigned long).

Приклади різних варіантів запису цілої константи – одиниця.

1, 01, 0x1; /* десяткова, вісімкова та шістнадцяткова одиниці за умовчанням відповідно до табл. 2.2 мають тип int*/

1u, 01u, 0x1u; /*десяткова, вісімкова та шістнадцяткова одиниці типу unsigned int*/

1L, 01L, 0х1L; /* десяткова, вісімкова та шістнадцяткова одиниці типу long*/

1UL, 01UL, 0х1UL; /* десяткова, вісімкова та шістнадцяткова одиниці типу unsigned long*/

Речова константа відрізняється від цілої константи наявністю десяткової точки або ознакою експоненти e(E). Саме за однією з цих ознак компілятор розпізнає речову константу. За замовчуванням компілятор відносить будь-яку речову константу незалежно від її значення типу double.За допомогою суфіксів L(l) або F(f) тип речової константи можна визначити явно як long double або float відповідно. Діапазон значень речових констант наведено у табл. 2.3

Таблиця 2.3

Дані речовинного типу

Приклади різних варіантів запису речової константи одиниця.

1.0Е+0, 1.0, 1., 1Е+0, 0.1e+1; /* речові одиниці типу double*/

1.0Е+0l, 1.0l, 1.l, 1Е+0l, 0.1e+1l; /* речові одиниці типу long double*/

1.0Е+0f, 1.0f, 1.f, 1Е+0f, 0.1e+1f; /* речові одиниці типу float*/

перераховані константивводяться за допомогою службового слова enum. Фактично це звичайні целочисленные константи (типу int), яким приписуються унікальні і зручні використання позначення. У загальному вигляді перераховані константи визначаються таким чином:

имя2 [=ініціалізатор], … , имяN [=ініціалізатор]>;

де имя1, имя2,…, имяN – довільні ідентифікатори, які збігаються зі службовими словами та іменами інших об'єктів програми. У квадратні дужки укладено елементи перерахування, які можуть бути опущені. Якщо у визначенні констант, що перераховуються, опустити = ініціалізатор, то вони будуть приписуватися ідентифікаторам за умовчанням. При цьому лівий у фігурних дужках ідентифікатор отримає значення 0, а кожен наступний збільшується на одиницю.

Цей порядок можна порушити, надавши за допомогою ініціалізатора будь-яке ціле значення константі. У цьому випадку, якщо наступна за нею константа не має явного ініціалізатора, вона отримає значення на одиницю більше, ніж попередня. Приклад перерахованих констант:

Перераховані константи zero, one, 2, ten, eleven, five, six, sss відповідно до описаних вище правил отрималинаступні значення: zero == 0, one == 1, two == 2, ten == 10, eleven ==11, five == 5, six ==6, sss == 7.

Символьні (літерні) константи- це один або два символи, укладені в апострофи (''). Односимвольні константи мають стандартний тип char. Приклади односимвольних констант 'x', 'Z', приклади двосимвольних констант 'DS', 'Sa'. Крім наведених вище прикладів, існує ще один спосіб запису символьних констант. Це послідовність символів, що починаються зі знака '\', яку називають Esc-послідовністю. Приклади символьних констант (Esc - послідовностей) '\n', '\0', '\012', '\x07\x07', '\n\t'. Таблиця допустимих у мові Сі++ Esc – послідовностей наведено нижче.

Допустимі Esc-послідовності у мові Сі++.

Перші сім Esc – послідовностей таблиці є керуючими кодами для пристроїв з інтерфейсом (принтер, монітор і т.д.). Вони не відображаються у тексті і взагалі не мають графічного уявлення. Але коли принтер або монітор виводить на екран текст і в ньому зустрічаються два байти з кодом 0x0d, 0x0a (\r\n), замість виведення символів на екран вони виконують команди перейти до початку поточного рядка і перейти на новий рядок. Тобто, вставляючи у потрібних місцях тексту, керуючі Esc – послідовності, ми можемо форматувати текст на екрані монітора чи роздруківці принтера оскільки вважаємо за потрібне.

Необхідність у 8 – 11 Esc-послідовностях виникає, коли потрібно використовувати символи \, ‘, “, ? у тексті програми. Справді, якщо символьному рядку зустрічається один символ \, він сприймається не як символ косої риси \, бо як ознака початку Esc – послідовності. Тому, якщо у програмі необхідно написати рядок, що містить шлях до файлу, наприклад“С:BCINBIN.bc.exe”, то правильно її буде записати так “C:BCINBIN.bc.exe”, скориставшись Esc – послідовністю '\'.

Останні два варіанти запису Esc-послідовності \000 і \хhh дозволяють встановити символ за допомогою його коду у вісімковому або шістнадцятковому поданні. Річ у тім, кожен символ у пам'яті комп'ютера зберігається як однобайтового числа (коду). Відповідність між кодом та символом встановлюється за так званими табл. ASCII коди (додаток 1). Так символ W по табл. ASCII кодів відповідає код 87, який у вісімковій або шістнадцятковій системі числення записується як 127 та 57 відповідно. Тому символ W можна записати в програмі кількома способами як 'W' або за допомогою Esc-послідовностей, як '\125' або '\х57'.

Рядок або рядкова константа,іноді звана літерним рядком, визначається як послідовність символів, укладених у лапки “ ” (не в апострофи):

"Це рядок, званий також рядковою константою"

Серед символів рядка можна використовувати ESC-послідовності. У цьому випадку, як і в уявленнях окремих символів, вони починаються із зворотної косою межі.

, :: .* ->* new delete typeid

Крім операцій [], () і ?: всі знаки операцій розпізнаються компілятором як окремі лексеми. Мова Сі++ дає можливість розширити дії чи, як то кажуть, перевантажити стандартні операції, тобто. поширити їх дію на нестандартні їм операнди (об'єкти, наприклад змінні, константи, з яких виконується операція). Опишемо коротко стандартні можливості окремих операцій.

Унарні операції (операції над одним операндом):

- Унарний мінус змінює знак арифметичного операнда (-3);

+ унарний плюс(введений для симетрії з унарним мінусом) (+5);

порозрядне інвертування внутрішнього двійкового коду цілісного аргументу (побитове заперечення)

5 дорівнює -6, (5 у двійковому вигляді дорівнює 00000000 00000101 при виконанні побитового заперечення отримуємо 11111111 11111010, що відповідає в додатковому коді числу -6);

! логічне заперечення (НЕ) застосовується до скалярних операндів цілий результат 0 (якщо операнд не нульовий, тобто істинний) або 1 (якщо операнд нульовий, тобто помилковий). Як логічне значення в мові Сі++ використовують цілі числа: 0 – брехня і не нуль (!0) – істина. Заперечення будь-якого ненульового числа буде 0, а заперечення нуля буде 1. Таким чином: !1 дорівнює 0; !2 дорівнює 0; !(-5.5) дорівнює 0; !0 дорівнює 1;

++ збільшення на одиницю (інкремент або автозбільшення) унарна операція, операндом якої має бути лівоприпустиме вираження;

++операнд - (Префіксна операція) збільшення значення операнда на одиницю до його використання у виразі; Приклад:

b = (++a)-b; /*Результат роботи b = 2, a = 4. Спочатку а збільшується на одиницю, і потім розраховується вираз b=а –b.*/

операнд++ - (постфіксна операція) збільшення значення операнда на одиницю після його використання у виразі. Приклад:

b=(a++)-b; /*Результат роботи b = 1, a = 4. Спочатку обчислюється вираз b = a – b, і потім а збільшується на одиницю.*/

Операнд може бути константою чи довільним виразом. Найчастіше операндами цієї операції є змінні різних типів;

- зменшення на одиницю (декремент або автозменшення) - унарна операція, операндом якої має бути лівоприпустиме вираження;

--операнд – (префіксна операція) зменшення значення операнда на одиницю до йоговикористання у виразі;

операнд - - (постфіксна операція) зменшення значення операнда на одиницю після його використання у виразі.

Операнд може бути константою чи довільним виразом. Найчастіше операндами цієї операції є змінні різних типів;

Розмірна операція обчислення розміру (в байтах) об'єкта того типу, який має операнд. Дозволено два формати операції: sizeof унарний вираз і sizeof (тип).

Проілюструємо застосування цієї операції зі стандартними типами:

std::cout n. Приклад: 6 > зсув вправо бітового уявлення значення лівого цілочисельного операнда на кількість розрядів, що дорівнює значенню правого цілісного операнда. Зсув вправо на n позицій бітового уявлення значення лівого цілісного операнда еквівалентний зменшенню його значення в 2 n разів з відкиданням дробової частини результату. Приклад: 9>2 дорівнює 2 (9 у двійковій системі це 1001 зсунувши вправо на два розряди, тобто відкинувши праворуч дві цифри, отримаємо в двійковій системі 10 або 2 в десятковій).

Порозрядні операції (визначені тільки для цілих операндів):

порозрядна диз'юнкція (АБО) бітових уявлень значень цілісних операндів;

^ порозрядне що виключає (АБО) бітових уявлень значень цілісних операндів.