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

char
1 байт
від-128 до 127

int
Залежить від реалізації


short
2 байта
від-32768 до 32767

long
4 байта
від-2.147.483.648 до 2.147.483.647

unsigned char
1 байт
від 0 до 255

unsigned
Залежить від реалізації


unsigned short
2 байта
від 0 до 65535

unsigned long
4 байта
від 0 до 4.294.967.295

Float
4 байта
стандартний формат IEЕЕ

Double
8 байтов
стандартний формат IEEE

long double
10 байтов
стандартний формат IEЕЕ


Тип char може використовуватися для зберігання букви, цифри або іншого символу з безлічі уявних символів. Значенням об'єкту типу char є код, відповідний даному символу. Тип char інтерпретується як однобайтне ціле з областю значень від -128 до 127. Тип unsigned char може містити значення в інтервалі від 0 до 255. Букви російського алфавіту мають коди, які відповідають типу unsigned char.
Слід зазначити, що уявлення в пам'яті і область значень для типів int і unsigned int не визначено в мові Сі. В більшості систем програмування розмір типу int (із знаком або без знака) відповідає реальному розміру цілого машинного слова. Наприклад, на 16-розрядному комп'ютері тип int займає 16 розрядів, або 2 байти. На 32-разрядному комп'ютері тип int займає 32 розряди, або 4 байти. Таким чином, тип int еквівалентний або типу short int (коротке ціле), або типу long int (довге ціле), залежно від комп'ютера. Аналогічно, тип unsigned int еквівалентний або типу unsigned short int, або типу unsigned long int.
Специфікації типів Int і unsigned int широко використовуються в програмах на Сі, оскільки вони дозволяють найбільш ефективно працювати з цілими значеннями на даному комп'ютері. Проте, оскільки розмір типів int і unsigned int являєеться машинно-залежним, програми, залежні від конкретного розміру типу int або unsigned int на будь-якому комп'ютері, можуть бути непереносимі на інший комп'ютер. Переносимість програм можна підвищити, якщо використовувати для посилання на розмір типу даних операцію sizeof.
Порядок розміщення байтів в пам'яті для базових цілих типів наступний (за збільшенням адрес):
для типу short—b0, b1;
для типу long—b0, b1,b2, b3, де b0—младший байт.
Архітектура процесора Intel 8086/88 дозволяє розміщати змінні різного розміру в пам'яті як з парної, так і з непарної адреси. Проте в останньому випадку звертання до змінних буде більш повільним. В СП ТС існує опція компіляції, яка задає вирівнювання всіх об'ектів, займаючих більше одного байта, на межу парного адреса. Пам'ять при цьому використовується менш эффективно, але швидкість звернення до змінних зросте. В СП MSC за замовчуванням проводиться вирівнювання на межу парної адреси. У версії 5.0 СП MSC існує опція компіляції забезпечуюча вирівнювання на межу, задану програмістом.
Згідно правилам перетворення типів в мові Сі, не завжди можливо використовувати у виразі максимальне або мінімальне значення для константи даного типу.
Допустимо вимагається використовувати у виразі значення -32768 типу short. Константний вираз -32768 складається з арифметичної операції заперечення (-), яка передає значенню константи 32768. Оскільки значення 32768 дуже велике для типу short, компілятор мови Сі представляє його типом long і, отже, константа -32768 матиме тип long. Значення -32768 може бути представлено типом short тільки шляхом явного приведення його до типу short за допомогою виразу (short) (-32768). Інформація при цьому не буде втрачена, оскільки значення -32768 може бути представлено двома байтами пам'яті. Вісімкові і шістнадцяткові константи можуть мати знаковий або беззнаковий тип, залежно від їх значення. Проте метод присвоювання компілятором мови Сі типів вісімковим і шістнадцятковим константам гарантує, що у виразах вони поводитимуться як беззнакові цілі (оскільки їх знаковий біт завжди рівний нулю).
СП ТС дозволяє явно присвоювати константам беззнаковий тип за допомогою суфікса u.
Для представлення значень з плаваючою крапкою використовується стандартний формат IEEE (Institute Electrical and Electronics
Engineers, Inc.). Значення типу float займають 4 байти, що складаються з біта знака 7-бітової двійкової експоненти і 24-бітової мантиси. Мантиса представляє число в інтервалі від 1.0 до 2.0. Оскільки старший біт мантиси завжди рівний одиниці, він не зберігається в пам'яті. Це представлення дає область значень приблизно від 3.4Е-38 до 3.4Е + 38.
Значення типу double займають 8 байтів. Їх формат аналогічен формату float, за винятком того, що експонента займає 11 бітів, а мантиса 52 біти плюс неявний старший біт, одиничний. Це дає область значень приблизно від 1.7Е-308 до 1.7Е + 308.
Значення типу long double займають 80 бітів; їх область значень—від 3.4Е-4932 до 1.1Е + 4932. Формат їх аналогічний формату double, проте мантиса довше на 16 бітів.