русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Узгодження типів у виразах


Дата додавання: 2014-04-22; переглядів: 1508.


Існують дві схеми узгодження типів операндів у виразах: арифметичні перетворення типів і перетворення типів в операціях присвоєння.

Арифметичні перетворення типів застосовуються при узгодженні типів операндів в арифметичних і порозрядних операціях, а також в операціях порівняння. Вони базуються на «підтягуванні» операнда молодшого типу до старшого (цей процес ще називають просування типів – type promotion). Встановлено таку ієрархію типів:

 

char < short ≤ int ≤ long < float < double < long double

 

Для цілих типів додатково діє умова

 

signed тип < unsigned тип

 

Підтягування типів виконується за такою схемою:

1) всі операнди з типами char і short розширяються до типу int;

2) якщо старший операнд є одним з цілочислових типів, а молодший є цілим зі знаком, то молодший операнд розширюється до старшого через розмноження біта знака;

3) якщо старший операнд є цілим, а молодший – без знакове число, то молодший операнд доповнюється до розміру старшого нульовими бітами;

4) перетворення signed тип у unsigned тип не змінює двійкового коду числа;

5) якщо старший операнд є дійсним, а молодший – цілим, то виконується перетворення цілого типу в дійсний;

6) якщо обидва операнди є дійсними, то молодший розширюється до розміру старшого.

В операціях присвоєння діє правило перетворення типу виразу, записаного справа від знака =, до типу змінної чи l-операнда, яким присвоюється значення даного виразу. При цьому:

1) якщо тип змінної (l-операнда) зліва від знаку = старший за тип виразу справа від знаку =, то тип виразу підтягується до типу змінної за схемою, описаною вище;

2) якщо тип змінної (l-операнда) зліва від знаку = молодший за тип виразу справа від знаку =, то значення змінної перетворюється (обрізається) до типу змінної.

Пониження типів пов’язане з такими перетвореннями:

1) перетворення числового значення старшого дійсного типу до молодшого дійсного типу за умови, що воно потрапляє в діапазон значень молодшого типу, реалізується зменшення (через округлення) точності мантиси; інакше результат перетворення не визначений;

2) перетворення числового значення цілого типу до одного з молодших типів виконується через відкидання зайвих старших байтів числа; відкинуті старші байти втрачаються, що може призвести до втрати старших значущих розрядів числа, а для знакових типів додатково може відбутись зміна знака обрізаного числового значення;

3) перетворення unsigned тип у signed тип не змінює розмір та двійковий код числа, старший біт стає знаковим розрядом нового знакового числа; якщо він дорівнює одиниці – число вважається від’ємним;

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


<== попередня лекція | наступна лекція ==>
Умовна операція | Умовні оператори. Оператори


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн