Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
GRIGOREV.DOC
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
608 Кб
Скачать
☆

1.4. Операции. Выражения

В языке С определены следующие операции:

a) арифметические операции:

унарный +, унарный -, сложение +, вычитание - , умножение *, деление /, остаток от деления %, инкремент ++, декремент --. Операция / определена как для вещественных операндов, так и для целых, но для целых операндов результат всегда целый и равен целой части частного. Инкрементная и декрементная операции применимы только к переменным, выражение x++ эквивалентно выражению x=x+1 . Возможны постфиксная и префиксная формы этих операций. При использовании префиксной формы значение переменной изменяется до его подстановки в выражение, а при использовании постфиксной формы - после вычисления выражения. Например, пусть переменная x описана как int x=5; тогда значение выражения ++x*2 будет равно 12, а значение выражения x++*2 равно 10, значение переменной в обоих случаях станет равным 6.

б) операции сравнения:

равно == , не равно != , больше > , больше либо равно >= , меньше < , меньше либо равно <= . Результат операции сравнения есть целое число 0 или 1.

в) логические операции:

отрицание ! , логическое “и” && , логическое “или” ||. При вычислении логических выражений любое ненулевое значение считается истинным, результат логической операции - целое число 0 или 1. Таким образом, логические операции применимы к любым скалярным величинам, в языке С вообще нет специального типа данных для логических, или булевских, величин. Логические выражения всегда вычисляются только до получения результата; так в выражении x!=2||1/x>3 при x=0 не произойдет ошибки, т.к. выражение 1/x не будет вычисляться.

г) операция sizeof:

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

Результат операции - размер объекта в байтах, тип результата всегда unsigned. В языке PASCAL эта операция реализована встроенной функцией SizeOf.

д) операция явного преобразования типа:

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

Если операнды некоторого выражения имеют разный тип, то они автоматически приводятся к одному (старшему) типу. Старшинство типов возрастает в такой последовательности : char < unsigned char < int < unsigned < long < float < double .

е) битовые операции:

побитовое отрицание ~ , побитовое "и" & , побитовое исключающее "или" ^ , побитовое "или" | , сдвиг битов влево << , сдвиг битов вправо >> .

Битовые операции применимы только к целым операндам, все они имеют аналоги в языке PASCAL : ~ = NOT, & = AND, ^ = XOR, | = OR, << = ShL, >> = ShR.

ж) операции присваивания:

в отличие от языка PASCAL в языке С конструкция, состоящая из двух операндов и операции присваивания, является выражением, его значение равно значению, полученному переменной в левой части выражения. Кроме обычной операции присваивания = существует еще 10 операций: += , -=, *= , /= , %= , <<= , >>= , &= , ^= , |= , смысл которых очевиден из простейшего примера : x+=a означает x=x+a .

з) операция адрес:

& переменная

Эта унарная операция применима только к переменным, ее аналог в языке PASCAL - операция @.

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

Приоритеты операций определены следующим образом:

унарные операции > {*, /, %} > {+, -} > {<<, >>} > {>, >=, <, <=}> {==, !=} > & > ^ > | > && > || > операции присваивания > операция "запятая".

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

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