Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
61.doc
Скачиваний:
55
Добавлен:
11.05.2015
Размер:
457.22 Кб
Скачать

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

Если в выражении встречаются переменные и константы разных типов, они преобразуются к одному типу. Компилятор преобразует «меньший» тип в «больший». Этот процесс называется продвижением типов (type promotion). Все переменные типов char и short int автоматически продвигаются в int. Это называется целочисленным расширением. Кроме того, действует следующее правило: если один из операндов имеет тип long, а второй – unsigned int, притом значениеunsignedintне может быть представлено типомlong, то оба операнда преобразуются вunsignedlong. После выполнения преобразований оба операнда относятся к одному и тому же типу, к этому типу относится и результат операции.

Программист может «принудительно» преобразовать значение выражения к нужному ему типу, используя операцию приведения типов. Общая форма оператора явного приведения типа:

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

Здесь тип – это любой поддерживаемый тип данных. Например, следующая запись преобразует значение выражения x/2 к типу float:

(float)x/2

Явное преобразование типа – это операция. Оператор приведения типа является унарным и имеет тот же приоритет, что и остальные унарные операторы.

26. Приоритет операций и порядок вычисления выражений.

Приоритет

Оператор

Описание

1

++

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

--

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

()

Вызов функции или подвыражение

[]

Выделение элемента массива

->

Указатель структуры

.

Член структуры

2

!

Логическое отрицание

~

Поразрядное логическое НЕ (двоичная инверсия)

-

Унарный минус (изменение знака)

+

Унарный плюс

(type)

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

*

Разыменование указателя

&

Определение адреса переменной

sizeof

Определение размера в байтах

3

*

Умножение

/

Деление

%

Остаток от деления

4

+

Сложение

-

Вычитание

5

>>

Поразрядный сдвиг вправо

<<

Поразрядный сдвиг влево

6

<

Меньше

>

Больше

<=

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

>=

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

7

==

Равно

!=

Не равно

8

&

Поразрядное логическое И

9

^

Поразрядное исключающее ИЛИ

10

|

Поразрядное логическое ИЛИ

11

&&

Логическое И

12

||

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

13

?:

Оператор условия

14

=

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

+=

Составное сложение

-=

Составное вычитание

*=

Составное умножение

/=

Составное деление

%=

Составное определение остатка от деления

>>=

Составной поразрядный сдвиг вправо

<<=

Составной поразрядный сдвиг влево

&=

Составное поразрядное логическое И

^=

Составное поразрядное исключающее ИЛИ

|=

Составное поразрядное логическое ИЛИ

15

,

Операция "запятая"

++

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

--

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

Все операторы, кроме унарных и ? связывают свои операнды слева направо. Унарные операторы (*, &, -) и ? связывают свои операнды справа налево.

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