Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции за I семестр 2014 - суммарный текст / Лекции за I семестр 2014 - суммарный текст.doc
Скачиваний:
209
Добавлен:
17.03.2016
Размер:
1.36 Mб
Скачать

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

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

Если объявлены: float x; int i; то как x=i; так и i=x; приводят к преобразованиям. При этом float преобразуется в int отбрасыванием дробной части.

Тип double преобразуется во float округлением.

Длинное целое преобразуется в более короткое целое и переменные типа char посредством отбрасывания лишних битов более высокого порядка.

При передаче данных функциям также происходит преобразование типов.

4.3. Операция явного приведения типа

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

Вид записи операции: (тип) выражение;

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

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

Например:

double x;

int n=6, k=4;

1) x=n/k; - дробная часть будет отброшена

2) x=(double)n/k; - использование операции приведения типа здесь позволяет избежать округления результата деления целочисленных операндов.

Другой пример:

int i=100000, j=100000;

long long k;

k=(long long)i*j; - использование операции приведения типа здесь позволяет избежать переполнения типа int.

4.4. Приоритеты операций

(по убыванию, чертой разделены разные приоритеты)

Операция

Краткое описание

Использование

Поря-док

выпол-нения

Унарные операции

.

Доступ к полю или методу

объект . поле

Слева

направо

->

Доступ к полю или методу по указателю

указатель -> поле

[]

Индексирование

переменная[выражение]

()

Вызов функции

ID(список_выр.)

++

Префиксный инкремент

++lvalue

Справа

налево

--

Префиксный декремент

--lvalue

++

Постфиксный инкремент

lvalue++

--

Постфиксный декремент

lvalue--

~

Побитовое НЕ

~выражение

!

Логическое НЕ

!выражение

-

Унарный минус

-выражение

+

Унарный плюс

+выражение

*

Раскрытие указателя

*выражение

&

Адрес

&выражение

sizeof

Размер объекта или типа

sizeof(выражение или тип)

()

Приведение типа

(тип)выражение

Бинарные и тернарная операции

*

Умножение

выражение * выражение

Слева

направо

/

Деление

выражение / выражение

%

Получение остатка

выражение % выражение

+

Сложение

выражение + выражение

-

Вычитание

выражениевыражение

<<

Сдвиг влево

выражение << выражение

>>

Сдвиг вправо

выражение >> выражение

<

Меньше

выражение < выражение

<=

Меньше или равно

выражение <= выражение

>

Больше

выражение > выражение

>=

Больше или равно

выражение >= выражение

==

Равно

выражение == выражение

!=

Не равно

выражение != выражение

&

Побитовое И

выражение & выражение

^

Побитовое исключающее ИЛИ

выражение ^ выражение

|

Побитовое ИЛИ

выражение | выражение

&&

Логическое И

выражение && выражение

||

Логическое ИЛИ

выражение || выражение

?:

Условная операция (тернарная)

выражение ? выражение : выражение

=

Присваивание

lvalue = выражение

Справа

налево

+= -= *= /= %=

<<= >>=

&= |= ^=

Сложение, умножение и др. с присваиванием

lvalue += выражение

lvalue *= выражение

lvalue <<= выражение

и т.д.

,

Последовательное вычисление

выражение, выражение

Слева

направо