Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие_2_изд_испр.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.27 Mб
Скачать

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

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

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

Пример.

sqrt((double)n)

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

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

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

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

CСur(<выражение>) currency

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

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

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

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

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

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

CVar(<выражение>) variant

Необходимо отметить особенности некоторых видов явных преобразований. Преобразование вида 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

m=s-0.5 k=3

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

Пример.

int k;

unsigned m;

k=-1;

m=k; m=65535

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

Пример.

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

k=123456789

s=k s=1.234568e+8

m=k Ошибка!

Вопросы для самопроверки и контроля Вопросы для самопроверки

  1. Что произойдет при присваивании переменной типа enum значения не из списка допустимых значений в программе на языке C? А в языке Basic?

  2. Есть ли предопределенный тип для дат/времени в языке C?

  3. Какое средство языка C напоминает тип variant языка Basic?

  4. Для чего нужен тип void?

  5. Какой язык позволяет менять структуру и размеры массивов во время выполнения программы?

  6. Может ли структура быть элементом другой структуры?

  7. Как называются инструкции, задающие пользовательский тип данных в языках C и Basic?

  8. Каков основной принцип автоматических преобразований числовых типов данных?

Контрольные вопросы

  1. Можно ли использовать данные типа currency не в денежных расчетах?

  2. Есть ли средства для манипулирования частями массивов, например, строкой или столбцом матрицы? Если есть, то в каком языке и какие?

  3. Есть ли средства для работы с битами? Назовите, если они есть.

  4. Что называют рекурсивной структурой?

  5. Что является признаком переменной структуры?

  6. Что такое объединение?

  7. Отличаются ли правила обращения к элементу структуры в языках C и Basic?

  8. Каковы недостатки использования типа данных variant?

  9. Напишите инструкцию явного преобразования типа языка C.