Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Преобразование типов




 

Если это не противоречит правилам, Object Pascal автоматически преобразует значения одного типа в значения других типов.

Рассмотрим следующий фрагмент кода:

 

var

Res: SmallInt;

Num1: Integer;

Num2: Integer;

{ далее... }

Num1:= 200;

Num2:= 200;

Res:= Num1 * Num2;

 

Здесь результат умножения двух чисел типа Integer присваивается переменной типа SmallInt. Несмотря на смесь типов, Object Pascal способен выполнить преобразование.

 

Вопрос: Какое значение получит переменная Res?.

Ответ: -25536.

Почему?

 

В таблице 1.1 указано, что максимальным значением типа SmallInt является число 32767. При добавлении единицы к числу 32767 типа SmallInt мы получим –32768, что соответствует нижней границе диапазона чисел этого типа. Это в точности соответствует поведению счетчика километража на спидометре автомобиля когда при пробеге последнего из первой сотни тысяч километров показание 99 999 сбрасывается на 00 000.

 

Выполните следующие упражнение:

 

1. Создайте новый проект. Поместите на форму надпись и кнопку.

2. Дважды щелкните на кнопке формы чтобы перейти в режим редактирования обработчика события OnClick.

3. Придайте обработчику события OnClick такой вид:

 

procedure TForm1.Button1Click(Sender: TObject);

var

X: SmallInt;

begin

X:= 32767;

X:= X + 1;

Label1.Caption:= IntToStr(X);

end;

 

4. Скомпилируйте программу и нажмите кнопку Button1.

 

Вы должны увидеть, что после щелчка на кнопке надпись показывает -32768 (функция IntToStr здесь преобразует целое значение в строковое). Итак, мы убедились в том, что 32767 + 1 = -32768!

Данное упражнение иллюстрирует эффект целочисленного переполнения (overflow wrapping).

При использовании переменных целого типа всегда надо помнить об ограниченности диапазонов их значений.

Иногда преобразование данных одного типа в другой недопустимо. В такой ситуации вы увидите диагностику (сообщение об ошибке) вроде

 

Incompatible types: Integer and Real.

 

Это сообщение информирует о том, что была сделана попытка присвоить переменной значение, тип которого не соответствует типу этой переменной.

Если некорректность использования данных целочисленных типов может быть выявлена на этапе компиляции программы, вы увидите сообщение вроде «Range checking error»

Например, при компиляции фрагмента

 

var

X: Byte;

begin

X:= 1000;

end;

 

будет выдано сообщение:

Constant expression violates subrange bounds.

 

Тем самым, компилятор информирует нас о том, что переменной X типа byte нельзя присвоить значение 1000, ибо переменные этого типа могут принимать любые значения только в диапазоне от 0 до 255.

 

ВНИМАНИЕ! Компилятор генерирует диагностические сообщения трех уровней серьезности: hint, warning и error.

1. hint – подсказка. Это что-то вроде «Обратите внимание на …»

2. warning – это предупреждение (серьезней чем hint)

3. error – это ошибка.

В первых двух случаях исполняемый файл все же создается, т.е. программа будет работать, но, возможно, некорректно. В последнем случае компилятор не сможет создать исполняемый файл.

Попробуйте заставить себя трактовать «hints» и «warnings» как сообщения о потенциальных ошибках в программе. Сообщениями этого типа компилятор «пытается» информировать вас о том, что в исходном тексте программы что-то не так, но это не страшно. Тем не менее, разберитесь в причине появления подсказки или предупреждения и устраните ее. Ситуации, когда предупреждения можно просто игнорировать, встречаются достаточно редко.

 




Поделиться с друзьями:


Дата добавления: 2015-04-29; Просмотров: 293; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.