КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Діапазони значень простих типів даних для IBM PC
Для дійсних типів в таблиці приведені абсолютні величини мінімальних і максимальних значень. Для написання переносимих на різні платформи програм не можна робити припущень про розмір типу int. Для його отримання необхідно користуватися операцією sizeof, результатом якої є розмір типу в байтах. Наприклад, для операційної системи MS-DOS sizeof (int) дасть в результаті 2, а для Windows 9X або OS/2 результатом буде 4. У стандарті ANSI діапазони значень для основних типів не задаються, визначаються тільки співвідношення між їх розмірами, наприклад: sizeof(float) sizeof(double) £ sizeof(long double) sizeof(char) £ sizeof(short) £ sizeof(int) £sizeof(long) Мінімальні і максимальні допустимі значення для цілих типів залежать від реалізації і приведені в заголовному файлі <limits.h> (<climits>), характеристики дійсних типів — у файлі <float.h> (<cfloat>), а також в шаблоні класу numeric_limits. Різні види цілих і дійсних типів, що розрізняються діапазоном і точністю представлення даних, введені для того, щоб дати програмістові можливість найефективніше використовувати можливості конкретної апаратури, оскільки від вибору типу залежить швидкість обчислень і об'єм пам'яті. Але оптимізована для комп'ютерів якого-небудь одного типу програма може стати непереносимою на інші платформи, тому в загальному випадку слід уникати залежностей від конкретних характеристик типів даних. Цілий тип (int) Розмір типу intне визначається стандартом, а залежить від комп'ютера і компілятора. Для 16-розрядного процесора під величини цього типу відводиться 2 байти, для 32-розрядного — 4 байти. Специфікатор shortперед ім'ям типу указує компілятору, що під число потрібно відвести 2 байти незалежно від розрядності процесора. Специфікатор longозначає, що ціла величина займатиме 4 байти. Таким чином, на 16-розрядному комп'ютері еквіваленти intі short int, а на 32-розрядному — intі long int. Внутрішнє представлення величини цілого типу — ціле число в двійковому коді. При використанні специфікатора signedстарший біт числа інтерпретується як знаковий (0 — додатне число, 1 — від’ємне). Специфікатор unsignedдозволяє представляти тільки додатні числа, оскільки старший розряд розглядається як частина коду числа. Таким чином, діапазон значень типу intзалежить від специфікаторів. За умовчанням всі цілочисельні типи вважаються знаковими, тобто специфікатор signedможна опускати. Константам, що зустрічаються в програмі, приписується той або інший тип відповідно до їх вигляду. Якщо цей тип з яких-небудь причин не влаштовує програміста, він може явно вказати необхідний тип за допомогою суфіксів L, l (long) і U, u (unsigned). Наприклад, константа 32L матиме тип long і займатиме 4 байти. Можна використовувати суфікси L і U одночасно, наприклад, 0x22UL або 05Lu. Типи з плаваючою крапкою (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.
|