Операции в языке С

Содержание

Слайд 2

ОПЕРАЦИИ В ЯЗЫКЕ С . В соответствии с количеством операндов, которые

ОПЕРАЦИИ В ЯЗЫКЕ С .

В соответствии с количеством операндов, которые используются

в операциях, они делятся на:
Унарные - один операнд.
Бинарные - два операнда.
Тернарную - три операнда.
Все операции, кроме условной и sizeof, могут быть перегружены.
Пробелы между символами внутри операции не допускаются.
Слайд 3

L-значение (L-value) – любое выражение, адресующее некоторый участок памяти, в который можно занести значение.

L-значение (L-value) –
любое выражение, адресующее некоторый участок памяти, в который можно

занести значение.
Слайд 4

L-ЗНАЧЕНИЕ (L-VALUE). Название L-value произошло от операции присваивания, поскольку именно ее

L-ЗНАЧЕНИЕ (L-VALUE).

Название L-value произошло от операции присваивания, поскольку именно ее левая

(Left) часть определяет, в какую область памяти будет занесен результат операции.
Переменная является частным случаем L-значения.
Слайд 5

УНАРНЫЕ ОПЕРАЦИИ. Унарные операции имеют наивысший приоритет

УНАРНЫЕ ОПЕРАЦИИ.

Унарные операции имеют наивысший приоритет

Слайд 6

БИНАРНЫЕ ОПЕРАЦИИ. П Р И О Р И Т Е Т

БИНАРНЫЕ ОПЕРАЦИИ.

П Р И О Р И Т Е Т

Слайд 7

БИНАРНЫЕ ОПЕРАЦИИ. П Р И О Р И Т Е Т

БИНАРНЫЕ ОПЕРАЦИИ.

П Р И О Р И Т Е Т

Слайд 8

БИНАРНЫЕ ОПЕРАЦИИ. П Р И О Р И Т Е Т

БИНАРНЫЕ ОПЕРАЦИИ.

П Р И О Р И Т Е Т

Слайд 9

ТЕРНАРНАЯ ОПЕРАЦИЯ. П Р И О Р И Т Е Т

ТЕРНАРНАЯ ОПЕРАЦИЯ.

П Р И О Р И Т Е Т

Слайд 10

БИНАРНЫЕ ОПЕРАЦИИ. Эти операции имеют самый низкий приоритет

БИНАРНЫЕ ОПЕРАЦИИ.

Эти операции имеют самый низкий приоритет

Слайд 11

Операции увеличения и уменьшения на 1 (++ и --). Эти операции, называются инкрементом и декрементом

Операции увеличения и уменьшения на 1 (++ и --).

Эти операции, называются

инкрементом и декрементом
Слайд 12

ОПЕРАЦИИ ++ И --. Операции ++ и -- имеют две формы

ОПЕРАЦИИ ++ И --.

Операции ++ и -- имеют две формы записи:
Префиксная

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

Операндом операции инкремента в общем случае является L-значение.

Слайд 13

Операции увеличения и уменьшения на 1 (++ и --) Пример: #include

Операции увеличения и уменьшения на 1 (++ и --)

Пример:

#include
int

main(){
int x = 3, у = 3;
printf("Значение префиксного выражения: %d\n", ++x);
printf("Значение постфиксного выражения: %d\n", у++);
printf("Значение х после приращения: %d\n", х);
printf("Значение у после приращения: %d\n ", у);
return 0;
}

Результат:

Значение префиксного выражения: 4
Значение постфиксного выражения: 3
Значение х после приращения: 4
Значение у после приращения: 4

Слайд 14

Операция определения размера sizeof. Операция sizeof предназначена для вычисления размера объекта или типа в байтах

Операция определения размера sizeof.

Операция sizeof предназначена для вычисления размера объекта или

типа в байтах
Слайд 15

ОПЕРАЦИЯ ОПРЕДЕЛЕНИЯ РАЗМЕРА SIZEOF. Операция sizeof две формы: sizeof выражение sizeof ( тип )

ОПЕРАЦИЯ ОПРЕДЕЛЕНИЯ РАЗМЕРА SIZEOF.

Операция sizeof две формы:
sizeof выражение
sizeof ( тип

)
Слайд 16

Операция определения размера sizeof Пример: #include int main(){ float x =

Операция определения размера sizeof

Пример:

#include
int main(){
float x = 1;
cout «

"sizeof (float) :" « sizeof (float);
cout « "\nsizeof x :" « sizeof x;
cout « "\nsizeof (x + 1.0) :" « sizeof (x + 1.0);
return 0;
}

Результат:

sizeof (float) : 4
sizeof x : 4
sizeof (x + 1.0) : 8

Слайд 17

Операция определения размера sizeof Последний результат связан с тем, что вещественные

Операция определения размера sizeof

Последний результат связан с тем, что вещественные константы

по умолчанию имеют тип double, к которому, как к более длинному, приводится тип переменной х и всего выражения.

Скобки необходимы для того чтобы выражение, стоящее в них, вычислялось раньше операции приведения типа, имеющей больший приоритет, чем сложение.

Слайд 18

Операции отрицания (-, ! и ~) Арифметическое отрицание (-) Логическое отрицание (!) Поразрядное отрицание (~)

Операции отрицания (-, ! и ~)

Арифметическое отрицание (-)
Логическое отрицание (!)
Поразрядное отрицание

(~)
Слайд 19

Операции отрицания Арифметическое отрицание (-) изменяет знак операнда целого или вещественного

Операции отрицания

Арифметическое отрицание
(-)

изменяет знак операнда целого или вещественного типа на

противоположный

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

дает в результате значение 0, если операнд истина (не нуль), и значение 1, если операнд равен нулю.
операнд должен быть целого или вещественного типа, может также иметь тип указатель

Поразрядное отрицание
(~)

инвертирует каждый разряд в двоичном представлении целочисленного операнда
поразрядное отрицание часто называют побитовым

Слайд 20

Деление (/) и остаток от деления (%) Операция деления (/) применима

Деление (/) и остаток от деления (%)

Операция деления (/) применима к

операндам арифметического типа
Если оба операнда целочисленные, результат операции округляется до целого числа, в противном случае тип результата определяется правилами преобразования.
Операция остатка от деления (%) применяется только к целочисленным операндам.
Знак результата зависит от реализации
Слайд 21

Деление (/) и остаток от деления (%) Пример: #include int main(){

Деление (/) и остаток от деления (%)

Пример:

#include
int main(){
int x

= 11, у = 4;
float z = 4;
printf("Результаты деления: %d %f\n", x/y, x/z);
printf("Остаток: %d\n", x%y);
return 0;
}

Результат:

Результаты деления: 2 2.750000
Остаток: 3

Слайд 22

Операции сдвига ( >) Операции сдвига ( >) применяются к целочисленным

Операции сдвига (<< и >>)

Операции сдвига (<< и >>) применяются к

целочисленным операндам, они сдвигают двоичное представление первого операнда влево или вправо на количество двоичных разрядов, заданное вторым операндом.
Слайд 23

ОПЕРАЦИИ СДВИГА ( >). При сдвиге влево ( При сдвиге вправо

ОПЕРАЦИИ СДВИГА (<< И >>).

При сдвиге влево (<<) освободившиеся разряды обнуляются.
При

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

Операции сдвига не учитывают переполнение и потерю значимости.

Слайд 24

Операции отношения ( , >=, ==, !=) Операции отношения сравнивают первый операнд со вторым.

Операции отношения (<, <=, >, >=, ==, !=)

Операции отношения сравнивают первый

операнд со вторым.
Слайд 25

ОПЕРАЦИИ ОТНОШЕНИЯ. Операнды могут быть арифметического типа или указателями. Результатом операции

ОПЕРАЦИИ ОТНОШЕНИЯ.

Операнды могут быть арифметического типа или указателями.
Результатом операции является значение

true или false.
любое значение, не равное нулю, интерпретируется как true.

Операции сравнения на равенство и неравенство имеют меньший приоритет, чем остальные операции сравнения.

Слайд 26

Поразрядные операции (&, |, ^) поразрядная конъюнкция & поразрядная дизъюнкция | поразрядное исключающее ИЛИ ^

Поразрядные операции (&, |, ^)

поразрядная конъюнкция &
поразрядная дизъюнкция |
поразрядное исключающее ИЛИ

^
Слайд 27

ПОРАЗРЯДНЫЕ ОПЕРАЦИИ. Поразрядные операции применяются только к целочисленным операндам и работают

ПОРАЗРЯДНЫЕ ОПЕРАЦИИ.

Поразрядные операции применяются только к целочисленным операндам и работают с

их двоичными представлениями.

При выполнении операций операнды сопоставляются побитно.

Слайд 28

Поразрядные операции поразрядная конъюнкция & бит результата равен 1 только тогда,

Поразрядные операции

поразрядная конъюнкция
&

бит результата равен 1 только тогда, когда соответствующие биты

обоих операндов равны 1

поразрядная дизъюнкция
|

бит результата равен 1 тогда, когда соответствующий бит хотя бы одного из операндов равен 1

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

бит результата равен 1 только тогда, когда соответствующий бит только одного из операндов равен 1.

Слайд 29

Поразрядные операции Пример: #include int main(){ cout cout cout return 0;

Поразрядные операции

Пример:

#include
int main(){
cout << "\n 6 & 5 =

" << (6 & 5);
cout << "\n 6 | 5 = " << (6 | 5);
cout << "\n 6 ^ 5 = " << (6 ^ 5);
return 0;
}

Результат:

6 & 5 = 4
6 | 5 = 7
6 ^ 5 = 3

Слайд 30

Логические операции (&& и ||) логическое И && логическое ИЛИ ||

Логические операции (&& и ||)

логическое И &&
логическое ИЛИ ||

Слайд 31

ЛОГИЧЕСКИЕ ОПЕРАЦИИ. Операнды логических операций И (&&) и ИЛИ (||) могут

ЛОГИЧЕСКИЕ ОПЕРАЦИИ.

Операнды логических операций И (&&) и ИЛИ (||) могут иметь

арифметический тип или быть указателями.
при этом операнды в каждой операции могут быть различных типов.
Преобразования типов не производятся, каждый операнд оценивается с точки зрения его эквивалентности нулю.
операнд, равный нулю, рассматривается как false, не равный нулю — как true.
Логические операции выполняются слева направо.

Если значения первого операнда достаточно, чтобы определить результат операции, второй операнд не вычисляется.

Слайд 32

Логические операции логическое И && результат операции имеет значение true только

Логические операции

логическое И
&&

результат операции имеет значение true только если оба

операнда имеют значение true

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

результат операции имеет значение true, если хотя бы один из операндов имеет значение true

Слайд 33

Операции присваивания (=, +=, −=, /=, *= и т. д.) Операции

Операции присваивания (=, +=, −=, /=, *= и т. д.)

Операции присваивания

могут использоваться в программе как законченные операторы.
Слайд 34

Операции присваивания (=, +=, −=, /=, *= и т. д.) Формат

Операции присваивания (=, +=, −=, /=, *= и т. д.)

Формат операции

простого присваивания (=):

операнд_1 = операнд_2

Первый операнд должен быть L-значением, второй — выражением

Сначала вычисляется выражение, стоящее в правой части операции, а потом его результат записывается в область памяти, указанную в левой части

мнемоническое правило: «присваивание — это передача данных "налево"»

То, что ранее хранилось в этой области памяти, естественно, теряется.

Слайд 35

Операции присваивания Пример: #include int main(){ int a = 3, b=5,

Операции присваивания

Пример:

#include
int main(){
int a = 3, b=5, c=7;
a

= b; b = а; с = с + 1;
cout << "a = " << a;
cout << "\t b = " << b;
cout << "\t с = " << с;
return 0;
}

Результат:

a = 5 b = 5 c = 8

Слайд 36

Операции присваивания В сложных операциях присваивания ( +=, *=, /= и

Операции присваивания

В сложных операциях присваивания
( +=, *=, /= и т.п.)


при вычислении выражения, стоящего в правой части, используется и
L-значение из левой части

Например, при сложении с присваиванием ко второму операнду прибавляется первый, и результат записывается в первый операнд
То есть выражение а += b является более компактной записью выражения а = а + b

Слайд 37

Условная операция (?:) Эта операция тернарная, то есть имеет три операнда.

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

Эта операция тернарная, то есть имеет три операнда.

Слайд 38

Условная операция (?:) Формат условной операции: операнд_1 ? операнд_2 : операнд_3

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

Формат условной операции:

операнд_1 ? операнд_2 : операнд_3

Первый операнд

может иметь арифметический тип или быть указателем

операнд, равный нулю, рассматривается как false
не равный нулю — как true

Если результат вычисления операнда 1 равен true, то результатом условной операции будет значение второго операнда, иначе — третьего операнда.

Вычисляется всегда либо второй операнд, либо третий
Их тип может различаться

Условная операция является сокращенной формой условного оператора if

Слайд 39

Условная операция (?:) Пример: #inc1ude int main(){ int a = 11,

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

Пример:

#inc1ude
int main(){
int a = 11, b =

4, max;
max = (b > a)? b : a;
printf("Наибольшее число: %d", max);
return 0;
}

Результат:

Наибольшее число: 11

Слайд 40

Условная операция (?:) Другой пример применения условной операции: i = (i

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

Другой пример применения условной операции:

i = (i < n)

? i + 1: 1;

Требуется, чтобы некоторая целая величина увеличивалась на 1, если ее значение не превышает n, а иначе принимала значение 1:

Слайд 41

Замечания Операции выполняются в соответствии с приоритетами для изменения порядка выполнения

Замечания

Операции выполняются в соответствии с приоритетами

для изменения порядка выполнения операций используются

круглые скобки

Если в одном выражении записано несколько операций одинакового приоритета:

унарные операции, условная операция и операции присваивания выполняются справа налево
остальные — слева направо

Например:

а = b = с означает а = (b = с)
а + b + с означает (а + b) + с

Слайд 42

Замечания в C допустимы выражения вида а = b = с

Замечания

в C допустимы выражения вида
а = b = с

сначала вычисляется

выражение b = с
затем его результат становится правым операндом для операции присваивания переменной а
Слайд 43

Если операнды, входящие в выражение, имеют разный тип, то перед вычислениями

Если операнды, входящие в выражение, имеют разный тип,
то перед вычислениями

выполняются преобразования типов
по определенным правилам,
обеспечивающим преобразование более коротких типов в более длинные для сохранения значимости и точности.
Слайд 44

Замечания изменяющие внутреннее представление величин с потерей точности без потери точности

Замечания

изменяющие внутреннее представление величин

с потерей точности
без потери точности

изменяющие только интерпретацию

внутреннего представления

К первому типу относится, например, преобразование целого числа в вещественное, ко второму — преобразование знакового целого в беззнаковое.

Преобразования бывают двух типов: