Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Си++ Занятие 3.doc
Скачиваний:
5
Добавлен:
12.11.2019
Размер:
118.78 Кб
Скачать

2.4 Неявное преобразование типов

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

Неявные преобразования типов данных происходят в следующих случаяx:

1) при выполнении арифметических действий,

2) при выполнении операции присваивания, если значение левой и правой части выражения различается по типу,

3) при передаче аргументов в функцию.

В независимости от причины, вызвавшей неявное преобразование, все они подчиняются общим правилам, которые состоят в следующем:

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

Согласно этому правилу float преобразуется в double, а long – в unsigned long и т.д.

2) операнд типа char всегда преобразуется к типу int по следующим правилам:

unsigned char преобразуется в int, у которого знаковый разряд всегда нулевой;

signed char преобразуется в int, у которого знаковый разряд совпадает со знаком из char.

3) В выражении тип правой части преобразуется к типу левой части выражения. Если размер результата в правой части больше размера операнда в левой части, то часть результата будет потеряна.

Пример.

double ft, sd;

unsigned char ch;

unsigned long in;

int i;

sd = ft*(i+ch/in);

В этом выражении преобразования типов данных будут выполняться в следующей последовательности:

Операнд ch преобразуется к типу unsigned int (правило для типа char).

Затем он преобразуется к типу unsigned long (к большему операнду выражения ch/in), по этой же причине i преобразуется к unsigned long.

Результат операции, заключенной в круглые скобки, будет иметь тип unsigned long.

Затем он преобразуется к типу double (к большему операнду выражения ft*(i+ch/in)).

Результат всего выражения будет иметь тип double.

2.5 Логические операции и операции отношения

Операции отношения используются для проверки условий, это бинарные операторы (с двумя операндами). В качестве первого операнда может выступать переменная или константа, которая сравнивается со вторым оператором – литералом, переменной или константой. Результат сравнения всегда логический – TRUE (истина – "да") или FALSE (ложь – "нет"). В С FALSE кодируется 0, а все что не 0, то TRUE. Поэтому логические переменные TRUE и FALSE можно заменять целыми переменными типа int.

К операциям отношения относятся:

> больше

< меньше

>= больше или равно

<= меньше или равно.

Все они имеют одинаковый ранг. Непосредственно за ними по уровню старшинства следуют операции сравнения на равенство или неравенство:

== равно (сравнение);

!= не равно.

Операции отношения ниже рангом, чем арифметические операции, поэтому выражение i < lim +3 понимается как i < (lim +3).

Если нам необходимо проверить сложное условие, то нужно объединить несколько простых логических выражений в единое сложное выражение. Для этих целей служат логические связки, называемые также логическими операциями.

К логическим операциям относятся:

&& - логическое "И" (конъюнкция), бинарная операция,

|| - логическое "ИЛИ" (дизъюнкция), бинарная операция,

! – логическое "НЕ" (отрицание), унарная операция.

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

Также как и у операций отношения, у логических операций результат бинарный – FALSE или TRUE (0 или 1).

Результат операции логическое И имеет значение TRUE только если оба операнда имеют значение TRUE. Результат операции логическое ИЛИ имеет значение TRUE, если хотя бы один из операндов имеет значение TRUE. Если значения первого операнда достаточно, чтобы определить результат операции, второй операнд не вычисляется.

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