Ноу Інти, лекція, типи даних в мові з

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

У стандарті C ++ немає типу даних, який можна було б вважати дійсно символьним. Для подання символьної інформації є два типи даних, придатних для цієї мети, - це типи char і wchar_t.

Змінна типу char розрахована на зберігання тільки одного символу (наприклад, букви або пробілу). У пам'яті комп'ютера символи зберігаються у вигляді цілих чисел. Відповідність між символами і їх кодами визначається таблицею кодування. яка залежить від комп'ютера і операційної системи. Майже у всіх таблицях кодування є великі та малі літери латинського алфавіту, цифри 0. 9, і деякі спеціальні символи. Найпоширенішою таблицею кодування є таблиця символів ASCII (American Standard Code for Information Interchange - Американський стандартний код для обміну інформацією).

Так як в пам'яті комп'ютера символи зберігаються у вигляді цілих чисел, то тип char насправді є підмножиною типу int.

Під величину символьного типу відводиться 1 байт.

Тип char може використовуватися зі специфікаторами signed і unsigned. В даних типу signed char можна зберігати значення в діапазоні від -128 до 127. При використанні типу unsigned char значення можуть знаходитися в діапазоні від 0 до 255. Для кодування використовується код ASCII. Символи з кодами від 0 до 31 відносяться до службових і мають самостійне значення тільки в операторах вводу-виводу.

Величини типу char також застосовуються для зберігання чисел з зазначених діапазонів.

Тип wchar_t призначений для роботи з набором символів, для кодування яких недостатньо 1 байта, наприклад в кодуванні Unicode. Розмір типу wchar_t дорівнює 2 байтам. Якщо в програмі необхідно використовувати рядкові константи типу wchar_t. то їх записують з префіксом L. наприклад, L "Слово".

Логічний (булевий) тип даних (тип bool)

У мові С ++ використовується двійкова логіка (істина. Брехня). Брехні відповідає нульове значення. істині - одиниця. Величини даного типу можуть також приймати значення true і false.

Внутрішня форма подання значення false відповідає 0, будь-яке інше значення інтерпретується як true. У деяких компіляторах мови С ++ немає даного типу, в цьому випадку використовують тип int. який при істинних значеннях видає 1, а при помилкових - 0. Під дані логічного типу відводиться 1 байт.

Перераховуються тип (тип enum)

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

Мінлива. яка може приймати значення з деякого списку певних констант, називається змінною перераховується типу або перерахуванням. Дана змінна може приймати значення тільки з іменованих констант списку. Іменовані константи списку мають тип int. Отже, пам'ять. відповідна змінної перерахування, - це пам'ять. необхідна для розміщення значення типу int.

Безліч значень цього типу порожньо. Тип void має три призначення:

  1. вказівка ​​про неповернення функцією значення;
  2. вказівка ​​про неотримання параметрів функцією;
  3. створення нетипізований покажчиків.

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

Основні типи даних

перетворення типів

При обчисленні виразів деякі операції вимагають, щоб операнди мали відповідний тип, в іншому ж випадку на етапі компіляції видається повідомлення про помилку. Наприклад, операція взяття залишку від ділення (%) вимагає цілочисельних операндів. Тому в мові С ++ є можливість приведення значень одного типу до іншого.

Перетворення типів - це приведення значення змінної одного типу в значення іншого типу.

Виділяють явне і неявне приведення типів. При явному приведення вказується тип змінної. до якого необхідно перетворити вихідну змінну. При неявному приведення перетворення відбувається автоматично, за правилами, закладеним в мові програмування С ++.

Формат операції явного перетворення типів:

Наприклад, int (x), float (2/5), long (x + y / 0.5).

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

Приклад 2. Часовий інтервал

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

Вихідними даними для цього завдання є шість цілих величин, які задають моменти початку і кінця інтервалу, результатами - три цілих величини (тип int).

Позначимо змінні для зберігання початку інтервалу hour1. min1 і sec1. для зберігання кінця інтервалу - hour2. min2 і sec2. а результуючі величини - hour. min і sec.

Для вирішення цього завдання необхідно перетворити обидва моменти часу в секунди, відняти перший з другого, а потім перетворити результат назад в години, хвилини і секунди. Отже, потрібно проміжна змінна sum_sec. в якій буде зберігатися величина інтервалу в секундах. Вона може мати вельми великі значення, адже в добі 86400 секунд, що виходить за межі типу short int. Отже, для цієї змінної виберемо довгий цілий тип (long int. Скорочено long).

Для перекладу результату з секунд назад в години і хвилини використовується відкидання дробової частини при діленні цілого числа на ціле.

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

1. Перетворення цілих типів зі знаком.

  • Ціле зі знаком перетвориться до коротшого цілому зі знаком. з втратою інформації: пропадають всі розряди числа, які знаходяться вище (або, відповідно - нижче) межі, що визначає максимальний розмір змінної.
  • Ціле зі знаком перетвориться до більш довгому цілому зі знаком. Шляхом розмноження знака. Тобто все додані біти двійкового числа будуть зайняті тим же числом, яке знаходилося в знаковому біті. якщо число було позитивним, то це буде, відповідно 0, якщо негативним, то 1.
  • Ціле зі знаком до цілого без знака. Першим кроком ціле зі знаком перетвориться до цілого зі знаком, що відповідає цільовому типу, якщо цей тип даних крупніше. У отриманого значення біт знака не відкидається, а розглядається рівноправним по відношенню до решти бітам, тобто тепер все біти утворюють числове значення.
  • Перетворення цілого зі знаком до плаваючого типу відбувається без втрати інформації. за винятком випадку перетворення типу long int або unsigned long int до типу float. коли точність часто може бути втрачена.

2. Перетворення цілих типів без знака.

  • Ціле без знака перетворюється до коротшого цілому без знака або зі знаком шляхом усічення.
  • Ціле без знака перетворюється до більш довгому цілому без знака або зі знаком шляхом додавання нулів зліва.
  • Ціле без знака перетворюється до цілого зі знаком того ж розміру. Якщо взяти для прикладу, unsigned short і short - числа в діапазоні від 32768 до 65535 перетворяться в негативні.
  • Ціле без знака перетворюється на змінний типу. Спочатку воно перетвориться до значення типу signed long. яке потім перетворюється в плаваючий тип.

3. Перетворення плаваючих типів.

  • Величини типу float перетворюються до типу double без зміни значення.
  • Величини double перетворюються до float c деякою втратою точності. тобто, кількості знаків після коми. Якщо значення занадто велике для float. то відбувається втрата значущості, про що повідомляється під час виконання.
  • При перетворенні величини з плаваючою точкою до цілим типам вона спочатку перетворюється до типу long (дрібна частина плаваючою величини при цьому відкидається), а потім величина типу long перетвориться до необхідного цілого типу. Якщо значення занадто велике для long. то результат перетворення не визначений. Зазвичай це означає, що на розсуд компілятора може вийти будь-який "сміття". У реальній практиці з такими перетвореннями зазвичай стикатися не доводиться.