Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект_студ1.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
499 Кб
Скачать
☆

Типи з плаваючою крапкою (float, double і long double)

Стандарт C++ визначає три типу даних для зберігання дійсних значень: float, double і long double.

Типи даних з плаваючою крапкою зберігаються в пам'яті комп'ютера інакше, ніж цілочисельні. Внутрішнє представлення дійсного числа складається з двох частин — мантиси і порядку. У IBM PC-сумісних комп'ютерах величини типу float займають 4 байти, з яких один двійковий розряд відводиться під знак мантиси, 8 розрядів під порядок і 23 під мантису. Мантиса — це число, більше 1.0, але менше 2.0. Оскільки старша цифра мантиси завжди рівна 1, вона не зберігається.

Для величин типу double, що займають 8 байт, під порядок і мантису відводиться 11 і 52 розряди відповідно. Довжина мантиси визначає точність числа, а довжина порядку — його діапазон.

При однаковій кількості байт, що відводиться під величини типу float і long int, діапазони їх допустимих значень сильно розрізняються із-за внутрішньої форми уявлення. Специфікатор 1ong перед ім'ям типу double указує, що під величину відводиться 10 байт.

Константи з плаваючою крапкою мають за умовчанням тип double. Можна явно вказати тип константи за допомогою суфіксів F, f (float) і L, 1 (long). Наприклад, константа 2E+6L матиме тип 1ong doublе, а константа 1.82f — тип fIoat.

Символьний тип (char)

Під величину символьного типу відводиться кількість байт, достатнє для розміщення будь-якого символу з набору символів для даного комп'ютера, що і зумовило назву типу. Як правило, це 1 байт.

Тип char, як і інші цілі типи, може бути із знаком або без знаку. У величинах із знаком можна зберігати значення в діапазоні від -128 до 127. При використанні специфікатора unsigned значення можуть знаходитися в межах від 0 до 255. Це досить для зберігання будь-якого символу з 256-символьного набору ASCII. Величини типу char застосовуються також для зберігання цілих чисел, що не перевищують межі вказаних діапазонів.

Розширений символьний тип (wchar_t)

Тип wchar_t призначений для роботи з набором символів, для кодування яких недостатньо 1 байта, наприклад, Unicode.

Розмір цього типу залежить від реалізації; як правило, він відповідає типу short. Строкові константи типу wchar_t записуються з префіксом L, наприклад, L"Gates".

Логічний тип (bool)

Величини логічного типу можуть приймати тільки значення true і false, що є зарезервованими словами. Внутрішня форма представлення значення false — 0 (нуль). Будь-яке інше значення інтерпретується як true. При перетворенні до цілого типу true має значення 1.

Тип void

Окрім перерахованих, до основних типів мови відноситься тип void, але безліч значень цього типу порожньо. Він використовується для визначення функцій, які не повертають значення, для вказівки порожнього списку аргументів функції, як базовий тип для покажчиків і в операції приведення типів.

Змінні. Клас пам'яті.

Для завдання класу пам'яті використовуються наступні специфікатори:

auto — автоматична змінна. Пам'ять під неї виділяється в стеку і при необхідності ініціалізувався кожного разу при виконанні оператора, що містить її визначення. Звільнення пам'яті відбувається при виході з блоку, в якому описана змінна. Час її життя — з моменту опису до кінця блоку. Для глобальних змінних цей специфікатор не використовується, а для локальних він приймається за умовчанням, тому задавати його явним чином великого сенсу не має.

extern — означає, що змінна визначається у іншому місці програми (у іншому файлі або далі по тексту). Використовується для створення змінних, доступних у всіх модулях програми, в яких вони оголошені.

static — статична змінна. Час життя — постійне. Ініціалізувався один раз при першому виконанні оператора, що містить визначення змінної. Залежно від розташування оператора опису статичні змінні можуть бути глобальними і локальними. Глобальні статичні змінні видно тільки в тому модулі, в якому вони описані.

register — аналогічно auto, але пам'ять виділяється по можливості в регістрах процесора. Якщо такої можливості у компілятора немає, змінні обробляються як auto.

int а; // 1 глобальна змінна а

int main(){

int b; // 2 локальна змінна b

extern int x; // 3 змінна х визначена у іншому місці

static int з; // 4 локальна статична змінна з

а = 1; //5 присвоєння глобальної змінної

int а; //6 локальна змінна а

а = 2; //7 присвоєння локальної змінної

::а = 3; //8 присвоєння глобальної змінної

return 0;

}

int x = 4; // 9 визначення і ініціалізація х

В даному прикладі глобальна змінна а визначена поза всіма блоками. Пам'ять під неї виділяється в сегменті даних на початку роботи програми, областю дії є вся програма. Область видимості — вся програма, окрім рядків 6-8, оскільки в першій з них визначається локальна змінна з тим же ім'ям, область дії якої починається з точки її опису і закінчується при виході з блоку. Змінні b і з — локальні, область їх видимості — блок, але час життя різний: пам'ять під b виділяється в стеку при вході в блок і звільняється при виході з нього, а змінна з розташовується в сегменті даних і існує весь час, поки працює програма.

Якщо при визначенні початкове значення змінних явним чином не задається, компілятор привласнює глобальним і статичним змінним нульове значення відповідного типу. Автоматичні змінні не ініціалізувалися.

Ім'я змінної повинне бути унікальним в своїй області дії (наприклад, в одному блоці не може бути два змінних з однаковими іменами).

Рада___________________________________________________________________________

Не жалійте часу на придумування відповідних імен. Ім'я повинне відображати сенс величини, що зберігається, бути легко розпізнаваним і, бажано, не містити символів, які можна переплутати один з одним, наприклад, 1,1 (рядкова L) або I (прописна i). Для розділення частин імені можна використовувати знак підкреслення. Не давайте змінним імена, що демонструють знання іноземного сленгу, — адже «як ви човен назвете, так він і попливе». Як правило, змінним з великою областю видимості даються довші імена (бажано з префіксом типу), а для змінні, все життя яких проходить впродовж декількох рядків початкового тексту, вистачить і однієї букви з коментарем при оголошенні.______________________

Опис змінної може виконуватися у формі оголошення або визначення. Оголошення інформує компілятор про тип змінної і клас пам'яті, а визначення містить, окрім цього, вказівка компілятору виділити пам'ять відповідно до типу змінної. У C++ більшість оголошень є одночасно і визначеннями.

У приведеному вище прикладі тільки опис 3 є оголошенням, але не визначенням. Змінна може бути оголошена багато разів, але визначена тільки в одному місці програми, оскільки оголошення просто описує властивості змінної, а визначення пов'язує її з конкретною областю пам'яті.