Простейшие операторы присваивания



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

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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!