Простейшие операторы присваивания
Другие операторы присваивания
Iнкрементнi и декрементнi операторы
Оператор? (Условное выражение)
Преобразование типов
Для бинарных операторов
Для присваивания
При вызове функций
Явное задание приведения
Приоритеты и ассоцiативнiсть операторов
В языке Си под термином "оператор" понимают элементарные операции (+, -, <,>, =). В других языках программирования под этим термином понимают крупные конструкции языка (цикла, условия).
В Сi такие конструкции называются "инструкциями".
Арифметические операторы
Особенности:
1. арнiсть (операторов): если 1 операнд - унарный, 2 - бинарный;
2. приоритет (правила, определяющие порядок вычисления значения выражения, содержащей операторы)
3. асоцiативнiсть (порядок вычисления значения выражений, содержащих операторы с одинаковым приоритетом)
Различают левой- и правоасоциативни операторы.
Арифметические - левоасоциативнi.
Позиция - место оператора по отношению к своим операндов.
Пример 1:
3 +2 - iнфиксна позиция;
+ 3 2 - префiксна позиция;
3 февраля + - постфiксна позиция.
3.1.1 Бинарные +, -, *, /,%
оператор | тип операндiв | |
цілий | дiйсний | |
+ - * / % | додавання вiднiмання множення розподіл нацiло залишок від розподілу | додавання вiднiмання множення розподіл - |
Приоритет
prio (+) = prio (-)
prio (*) = prio (/)
prio (*, /,%)> prio (+, -)
3.1.2 Унарнi +, -
|
|
1. Наивысший приоритет;
2. Префiксна позиция;
3. Имеют один операнд.
Операторы отношений и сравнение на равенство
Бинарные операторы:
- отношений :>,> =, <, <= (одинаковый приоритет);
- сравнение на равенство : = =,! = (одинаковый приоритет).
Приоритет
prio (отношений)> prio (сравнение на равенство)
prio (отношений) <prio (арифметические)
Пример 2:
k +1 <l +2 = (k +1) <(l +2) year% 4 = = 0
Результат
- "Ложь" - 0;
- "Истина" - 1.
Логический тип в языке Си моделируется целым типом данных.
Логические операторы
Бинарные
& & логическое i (/ \);
| | -логическое или (\ /).
- Операнды вычисляются слева направо до выяснения истинности результата:
- Результат & & - "ложь", если хоть один операнд "ложь";
- Результат | | - "истина", если хоть один операнд "истина";
- Лiвоасоциативнi
Приоритет
prio (& &)> prio (| |)
prio (&&,| |) <prio (отношений, сравнение на равенство)
3.3.2 Унарный оператор !
логического отрицания:
Приоритет
prio (!)> prio (& &, | |)
Пример 3:
/ * эквиваленты: * /
(res = = 0) и! res
Побитовые операторы
Применяются к символьного или цiлочисельного типа данных (char, short, int, long) знакового или беззнакового.
- Бинарные операторы
3.4.1 Побитовое i ( & )
|
|
- Для обнуления некоторых разрядов.
Пример 4:
maska 1 = 017;
p = p & maska 1;
maska обнуление 0-11 разрядов, а младшие (12-15) остаются такими, какими они были в числе р .
г) maska | 10101 ... 10101 00000 ... 01111 00000 ... 00101 | 017 |
3.4.2 Побитовое или ( | )
- Для установки разрядов в 1.
Пример 5:
maska 2 = 03;
m = m | maska 2;
m) maska | 10101 ... 10101 00000 ... 00011 10101 ... 10111 |
3.4.3 Побитовое или, что исключает ( ^ )
Пример 6:
x = 0177;
y = 01;
x ^ y = / * = 0000 ... 1111110 * /
^ | 0000000001111111 0000000000000000 0000000001111110 | X Y= 176 |
3.4.4 Сдвиг влево <<
Правый операнд:> 0 и целое число.
Выполняется сдвиг левого операнда влево на количество двоичных разрядов, указанных правым операндом.
Пример 7:
x = 02; / * 010 * /
y = x <<1; / * = 0100 = 4 * /
z = x <<2; / * = 01000 = 8 * /
Сдвиг влево соответствует умножению входного числа на степень 2, показатель которого задан правым операндом.
3.4.5 Сдвиг вправо >>
Правый операнд:> 0 и целое число.
Пример 8:
x = 06; / * 1102 * /
y = x>> 1; / * 112 = 3 * /
z = x>> 2; / * 12 * /
Сдвиг вправо соответствует цiлочисельному делению входного числа на степень 2, показатель которой задан правым операндом.
- Унарный оператор побитовое отрицание ~
Пример 9:
|
|
c = c & ~ 03;
03: 000 .......... 011
~ 03: 111 .......... 100
c CnCn-1Cn-2 ... C00
Операторы присваивания
Самый оператор присваивания
<V> = <e>
где <V> - переменная;
<e> - выражение;
- Семантика : значением выражения, в который входит присваивания, является значение левого операнда после присваивания.
- Iнфiксний
- Бинарный
- Правоасоциативний .
Приоритет
prio (=) <prio (всех изученных)
Другие операторы присваивания С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 .
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;
Преобразование типов
Преобразование (приведение) выполняется тогда, когда у оператора операнды имеют разные типы.
Результаты - некий общий тип данных.
Для бинарных операторов
а) если long double, то long double;
б) если double, то double;
в) если float, то float;
г) если short, int то int;
д) если long, то long;
Для присваивания
Значение правой части приводится к типу левой части => это тип результата.
а) char -> int: размножение знака;
б) int -> short
int -> char
long -> short отбрасывания старших разрядов;
long -> int
long -> char
в) float -> int
int -> float
г) doubl -> float: округлением / отвержением.
При вызове функций.
Будет рассмотрен в теме «Функции».
3.8.4 Явное задание приведения:
оператор (<тип>)
- Унарный
- Префiксний
- Правоасоциативний.
Синтаксис:
(Имья_типу) e (где е - выражение)
Семантика:
<Е> приводится к <типа>
Пример 15:
int x = 16; double y;
...
y = sqrt ((double) x);
Пример 14:
int x = 16;
...
y = (int) sqrt ((double) x);
Дата добавления: 2020-04-25; просмотров: 55; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!