Компонентный Паскаль/Переменные и константы: различия между версиями

Содержимое удалено Содержимое добавлено
Строка 106:
== Преобразования типов ==
Язык Компонентный Паскаль был ''спроектирован'', а не ''сочинён''. Поэтому правила преобразования типов просты, понятны и предсказуемы.
 
=== Преобразования числовых типов ===
Как уже было выше описано, самым мощным диапазоном представления чисел является тип REAL. В случае преобразований при необходимости, этот тип преобразуется в более ограниченный -- SHORTREAL. Если этот тип придётся преобразовывать, он в свою очередь сужается до LONGINT. Тип длинное целое при сжатии переходит в тип INT (4 байта). После типа целого сжатие диапазона идёт в сторону SHORTINT (2 байта). Короткое целое тоже может быть сжато до BYTE. Дальше диапазон числа уменьшить нельзя. Тип BOOLEAN, строго говоря числовым не является, хотя и содержит логические "0" и "1".
Обратное преобразование также верно. Например, если разделить два целых числа 3 и 2 -- результат будет вещественное число. КП прекрасно понимает, что без этого результат очень неточным. Поэтому, если результат такого деления попытаться присвоить целочисленной переменной -- такой модуль даже не удастся скомпилировать -- Компонентный Паскаль просто не позволит это сделать! В то же время, если сумма двух целых превышает динамический диапазон целого -- КП на стадии компиляции постарается выяснить этот факт, и потребует результат присваивать длинному целому. Если выяснить на этапе компиляции это невозможно, КП во время исполнения остановит программу, и не позволит проскочить момент переполнения и "улететь программе в космос".
Те же самые правила касаются и остальных преобразований типов. Коротко схему преобразования типов можно отобразить так:
 
<code>
REAL >= SHORTREAL >= LONGINT >= INTEGER >= SHORTINT >= BYTE