Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
933.3 Кб
Скачать

10.10. Пользовательские типы данных

В языке C и предыдущих версиях языка Basic для определения таких типов данных как: матрицы, строки, точки и т.п. использовались инструкции typedef и Type соответственно. Сейчас для этих целей в изучаемых языках применяют понятия структуры и класса. Поэтому в данном курсе эти инструкции не расматриваются. Структуры изложены ранее. Основополагающее понятие класса будет введено при изучении последующих дисциплин.

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

Различают автоматические преобразования, которые выполняются транслятором в случае вхождения в состав выражения объектов разных типов, и явные преобразования, задаваемые указанием программиста.

10.10.1. Автоматические преобразования

Большинство автоматических преобразований касаются числовых типов данных. Их принцип: преобразование выполняется от частного к более общему типу, т.е. от целых к данным с плавающей точкой. Если в выражении данные одного типа, но различной длины, то результат получает размер наиболее длинного из операндов.

Для языка C это можно выразить следующими цепочками:

charshortintlongdouble floatdouble

Для языка Basic:

ByteShortIntegerLongDouble SingleDouble

Это позволяет не терять точности представления данных при преобразовании.

В языке Basic допустимо преобразование из числа в строку и обратно. Для успешного преобразования из строки в число необходимо, чтобы содержание строки могло быть интерпретировано как число в любой форме представления. Число в строку преобразуется всегда успешно. Для реализации автоматических (неявных) преобразований в среде разработки должна быть установлен режим Option strict Off. Для VB 2008 он устанавливается в пункте меню Project <имя проекта> Properties Compile Option strict. Для русифицированной версии VB 2010 – Проект  Свойства: <имя проекта>  Компиляция  Проверка сужающих преобразований.

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

10.10.2. Явные преобразования

В языке C они выполняются конструкцией вида:

(<имя-типа>)<выражение>

Пример.

sqrt((double)n)

Следует заметить, что применение оператора приведения типа, как его принято называть, ограничено, поскольку автоматические преобразования в большинстве случаев дают тот же результат.

В языке Basic явные преобразования выполняются с помощью группы встроенных функций.

CBool(<выражение>) Boolean

CByte(<выражение>) Byte

har(<выражение>) Char

CDate(<выражение>) Date

CDbl(<выражение>) Double

CDec(<выражение>) Decimal

CInt(<выражение>) Integer

CLng(<выражение>) Long

CSbyte(<выражение>) SByte

CShort(<выражение>) Short

CSng(<выражение>) Single

CStr(<выражение>) String

CUInt(<выражение>) UInteger

CULng(<выражение>) ULong

CUShort(<выражение>) UShort

Необходимо отметить особенности некоторых видов явных преобразований. Преобразование вида float | double int в языке C приводит к отбрасыванию дробной части.

Пример.

int k, m;

float s;

s=3.78;

k=s; k=3

m=-s; s=-3

В языке Basic аналогичное преобразование вызывает округление.

Пример.

dim k as integer, m as integer, s as single

s=3.78

k=s k=4

k=s-0.5 k=3

Преобразование вида int unsigned в языке C для отрицательных чисел приводит к следующему эффекту.

Пример.

short k;

unsigned short m;

k=-1;

m=k; m=65535

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

Пример.

Dim k As Long, s As Single, m As Short

k=123456789

s=k s=1.234568e+8

m=k Ошибка!

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]