Ключові слова для визначення основних типів даних:

Цілочисельні типи: Типи дійсних чисел:
char float
int double
short long double
long
signed
unsigned

Змінна будь-якого типу може бути оголошена такою що не модифікується. Це досягається додаванням ключового слова const до специфікатору типу. Об’єкти з типом const є даними використовуваними тільки для читання, тобто цій змінній не може бути присвоене нове значення. Відзначимо, що якщо після слова const відсутній специфікатор-типу, то мається на увазі специфікатор типу int. Якщо ключове слово const стоїть перед оголошенням складових типів (масив, структура, суміш, перелік), то це призводить до того, що кожен елемент також повинен бути тим, що не модифікується, тобто значення йому може бути присвоене тільки один раз.

Приклади:

1const double A=2.128E-2;
2
3const B=286; /*мається на увазі const int B=286)*/

Приклади оголошення складних типів будуть розглянуті далі.

Дані цілочисельного типу

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

Таблиця 6

Тип Розмір пам’яті в байтах Діапазон значень
char 1 від -128 до 127
int від -32768 до 32767
short 2 від -32768 до 32767
long 4 від -2 147 483 648 до 2 147 483 647
long long int
unsigned char 1 від 0 до 255
unsigned short 2 від 0 до 65535
unsigned long 4 від 0 до 4 294 967 295

Відзначимо, що ключові слова signed і unsigned необов’язкові. Вони вказують, як інтерпретується нульовий біт оголошуваної змінної, тобто, якщо вказане ключове слово unsigned, то нульовий біт інтерпретується як частина числа, інакше нульовий біт інтерпретується як знаковий. У разі відсутності ключового слова unsigned ціла змінна вважається знаковою. В тому випадку, якщо специфікатор типу складається з ключового типу signed або unsigned і далі слідує ідентифікатор змінної, то вона розглядатиметься як змінна типу int.

Наприклад:

unsigned int n;

unsigned int b;

int с; (мається на увазі signed int с );

unsigned d; (мається на увазі unsigned int d );

signed f; (мається на увазі signed int f ).

Відзначимо, що модифікатор типу char використовується для представлення символу (з масиву представлення символів) або для оголошення рядкових літералів. Значенням об’єкту типу char є код (розміром 1 байт), відповідний символу, що представляється. Для представлення символів кириличного алфавіту, модифікатор типу ідентифікатора даних має вид unsigned char, оскільки коди кириличних букв перевищують величину 127.

Слід зробити наступне зауваження: у мові Сі не визначене подання в пам’яті і діапазон значень для ідентифікаторів з модифікаторам типу int і unsigned int. Розмір пам’яті для змінної з модифікатором типу signed int визначається завдовжки машинного слова, яке має різний розмір на різних машинах. Так, на 16-ти розрядних машинах розмір слова рівний 2-м байтам, на 32-х розрядних машинах відповідно 4-м байтам, тобто тип int еквівалентний типам short int, або long int залежно від архітектури використовуваної ЕОМ. Таким чином, одна і та ж програма може правильно працювати на одному комп’ютері і неправильно на іншому. Для визначення довжини пам’яті, яке займає змінна, можна використовувати операцію sizeof мови Сі, повертаючи значення довжини вказаного модифікатора-типу.

Наприклад:

1a = sizeof(int);
2b = sizeof(long int);
3c = sizeof(unsigned long);
4d = sizeof(short);

Відзначимо також, що вісімкові і шістнадцяткові константи також можуть мати модифікатор unsigned. Це досягається вказівкою ключа u або U після константи, константа без цього префікса вважається знаковою.

Наприклад:

0xA8C (int signed);

01786l (long signed);`

0xF7u (int unsigned );

Дані типу з плаваючою крапкою

Для змінних, що представляють число з плаваючою крапкою використовуються наступні модифікатори типу: float, double, long double (у деяких реалізаціях мови long double Сі відсутнє).

Величина типу float займає 4 байти. З них 1 байт відводиться для знаку, 8 біт для надмірної експоненти і 23 біти для мантиси. Відзначимо, що старший біт мантиси завжди рівний 1, тому він не заповнюється, у зв’язку з цим діапазон значень змінної з плаваючою крапкою приблизно рівний від 3.14E-38 до 3.14E+38.

Величина типу double займає 8 біт в пам’яті. Її формат аналогічний формату float. Біти пам’яті розподіляються таким чином: 1 біт для знаку, 11 біт для експоненти і 52 біти для мантиси. З урахуванням опущеного старшого біта мантиси діапазон значень рівний від 1.7E-308 до 1.7E+308.

Тип даних double — це, в основному, точний тип даних, здатний утримувати 64 біти десяткових чисел або коми з плаваючою комою. Оскільки double має більшу точність, ніж float, цілком очевидно, що він займає вдвічі більше пам’яті, ніж тип з плаваючою комою. Він може легко вмістити від 16 до 17 цифр після коми або перед нею.

Приклади:

1float f, a, b;
2
3double x, y;

Для змінних, що представляють число з плаваючою крапкою використовуються наступні модифікатори типу: float, double, long double (у деяких реалізаціях мови long double Сі відсутнє).

Величина типу float займає 4 байти. З них 1 байт відводиться для знаку, 8 біт для надмірної експоненти і 23 біти для мантиси. Відзначимо, що старший біт мантиси завжди рівний 1, тому він не заповнюється, у зв’язку з цим діапазон значень змінної з плаваючою крапкою приблизно рівний від 3.14E-38 до 3.14E+38.

Величина типу double займає 8 біт в пам’яті. Її формат аналогічний формату float. Біти пам’яті розподіляються таким чином: 1 біт для знаку, 11 біт для експоненти і 52 біти для мантиси. З урахуванням опущеного старшого біта мантиси діапазон значень рівний від 1.7E-308 до 1.7E+308.

Тип даних double — це, в основному, точний тип даних, здатний утримувати 64 біти десяткових чисел або коми з плаваючою комою. Оскільки double має більшу точність, ніж float, цілком очевидно, що він займає вдвічі більше пам’яті, ніж тип з плаваючою комою. Він може легко вмістити від 16 до 17 цифр після коми або перед нею.

Приклади:

1float f, a, b;
2
3double x, y;