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

3.5.2 Другие операторы присваивания Сi

Другие операторы присваивания Си имеют вид:

<e1> <op> = <e2>

где <e1>, <e2> - выражения;  <op> - бинарный оператор.

Это операторы:

+ = / = <<= & =

-=% =>> = | =

*=

Пример 10:

x = 15 x8 = 015;

y = 8 y8 = 07;

z = 5 z8 = 05;

x + = 2; / * x = 17 * /

y -= 7; / * y = 1 * /

z * = 4; / * z = 20 * /

z / = 2; / * z = 10 * /

z% = 3; / * z = 3 * /

x8 <<= 2; / * x8 = 064 * /

y8>> = 1; / * y8 = 03 * /

z8 & = 01; / * z8 = 01 * /

x8 | = 03; / * x8 = 067 * /

x8 ^ = 07; / * x8 = 060 * /

Внимание

x * = a + b = x = x * (a + b)

! = x = x + a + b

Второе выражение используется как один операнд. Все операторы присваивания - правоасоциативнi .

3.6 Iнкрементнi и декрементнi операторы

-Унарнi операторы

  • iнкрементний + + (добавляет 1 к своего операнда);

  • декрементний - (отнимает 1 из операнда);

Эти операторы могут быть в двух позициях:

1.Префiксний iнкремент или декремент

Префiксний + + (-) увеличивает (уменьшает) операнд до его использования .

2. Постфiксний

Постфiксний + + (-) увеличивает (уменьшает) операнд после его использования .

Пример 11:

x = 2;

y = x + +; / * y = x, x + 1; y = 2, x = 3 * /

x = 2; z = + + x; / * x + = 1, z = x; x = 3, z = 3 * /

Можно применять к переменной, но не до выражений.

Пример 12:

j + +; - i / * верно * /

(i + j) + +; / * неверно * /

3.7 Оператор ? (условное выражение)

Синтаксис: <E1>? <E2>: <E3>

Семантика:

1. обчилюеться <E1>;

2. если <E1> = "истина", то значение оператора = E2, иначе = E3.

Пример 13:

Ci:

если x> y то

z = X Z = (x> y)? x: y;

иначе

z = y

Пример 14:

abs_x = (x> 0)? x: - x;

 

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

Преобразование (приведение) выполняется тогда, когда у оператора операнды имеют разные типы.

Результаты - некий общий тип данных.

3.8.1 Для бинарных операторов

а) если long double, то long double;

б) если double, то double;

в) если float, то float;

г) если short, int то int;

д) если long, то long;

3.8.2 Для присваивания

Значение правой части приводится к типу левой части => это тип результата.

а) char -> int: размножение знака;

б) int -> short

int -> char

long -> short отбрасывания старших разрядов;

long -> int

long -> char

в) float -> int

int -> float

г) doubl -> float: округлением / отвержением.

 

3.8.3 При вызове функций.

Будет рассмотрен в теме «Функции».

3.8.4 Явное задание приведения:

оператор (<тип>)

- Унарный

- Префiксний

- Правоасоциативний.

Синтаксис:

(Имья_типу) e (где е - выражение)

Семантика:

<Е> приводится к <типа>

Пример 15:

int x = 16; double y;

...

y = sqrt ((double) x);

Пример 14:

int x = 16;

...

y = (int) sqrt ((double) x);

3.9 Приоритеты и асоциативнiсть операторов.

В таблице:

  1. Операторы, содержащиеся в одной строке, имеют одинаковый приоритет.

  2. Строки отсортованi по убыванию приоритета

  3. ЛДвойная волна 7 - выполнение слева направо, П - исполнение справа налево

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